Mam datable wygenerowany z zawartością pliku csv. Używam innych informacji, aby zmapować jakąś kolumnę csv (teraz w pliku datatable) na informacje, które użytkownik musi wypełnić.
W najlepszym świecie mapowanie byłoby zawsze możliwe. Ale to nie jest rzeczywistość ... Więc zanim spróbuję zmapować wartość kolumny datatable, musiałbym sprawdzić, czy ta kolumna w ogóle istnieje. Jeśli tego nie zrobię, sprawdź, czy mam ArgumentException.
Oczywiście mogę to sprawdzić za pomocą takiego kodu:
try
{
//try to map here.
}
catch (ArgumentException)
{ }
ale mam na razie 3 kolumny do zmapowania i niektóre lub wszystkie mogą istnieć / brakować
Czy istnieje dobry sposób sprawdzenia, czy kolumna istnieje w pliku danych?
DataSet
/DataTable
? Jeśli tak, możesz przejrzeć kolekcję Kolumny tabeli, aby znaleźć listę wszystkich kolumn w tabeli.Odpowiedzi:
Możesz użyć
operator Contains
,private void ContainColumn(string columnName, DataTable table) { DataColumnCollection columns = table.Columns; if (columns.Contains(columnName)) { .... } }
MSDN - DataColumnCollection.Contains ()
źródło
myDataTable.Columns.Contains("col_name")
źródło
Dla wielu kolumn możesz użyć kodu podobnego do podanego poniżej. Właśnie przez to przejrzałem i znalazłem odpowiedź, aby sprawdzić wiele kolumn w 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; }
źródło
Możesz spojrzeć na
Columns
właściwość danejDataTable
, jest to lista wszystkich kolumn w tabeli.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
źródło
DataColumnCollection col = datatable.Columns; if (!columns.Contains("ColumnName1")) { //Column1 Not Exists } if (columns.Contains("ColumnName2")) { //Column2 Exists }
źródło