Csvファイルのコンテンツで生成されたデータファイルがあります。他の情報を使用して、csvの一部の列(現在はデータテーブルにあります)を、ユーザーが入力する必要がある情報にマップします。
最高の世界では、マッピングは常に可能です。しかし、これは現実的ではありません...したがって、データテーブルの列の値をマップする前に、その列が存在するかどうかを確認する必要があります。このチェックを行わないと、ArgumentExceptionが発生します。
もちろん、次のようなコードでこれを確認できます。
try
{
//try to map here.
}
catch (ArgumentException)
{ }
しかし、私は今のところ3つの列をマップする必要があり、一部またはすべてが既存/欠落している可能性があります
データテーブルに列が存在するかどうかを確認する良い方法はありますか?
operator Contains
を使用できますが、
private void ContainColumn(string columnName, DataTable table)
{
DataColumnCollection columns = table.Columns;
if (columns.Contains(columnName))
{
....
}
}
myDataTable.Columns.Contains("col_name")
複数の列の場合、以下に示すコードに似たコードを使用できます。私はこれを調べていたところ、Datatableの複数の列をチェックする答えを見つけました。
private bool IsAllColumnExist(DataTable tableNameToCheck, List<string> columnsNames)
{
bool iscolumnExist = true;
try
{
if (null != tableNameToCheck && tableNameToCheck.Columns != null)
{
foreach (string columnName in columnsNames)
{
if (!tableNameToCheck.Columns.Contains(columnName))
{
iscolumnExist = false;
break;
}
}
}
else
{
iscolumnExist = false;
}
}
catch (Exception ex)
{
}
return iscolumnExist;
}
特定のColumns
のDataTable
プロパティを見ることができます。これは、テーブル内のすべての列のリストです。
private void PrintValues(DataTable table)
{
foreach(DataRow row in table.Rows)
{
foreach(DataColumn column in table.Columns)
{
Console.WriteLine(row[column]);
}
}
}
http://msdn.Microsoft.com/en-us/library/system.data.datatable.columns.aspx