J'ai un datable généré avec le contenu d'un fichier csv. J'utilise d'autres informations pour mapper une colonne du fichier csv (maintenant dans le datatable) sur les informations que l'utilisateur doit renseigner.
Dans le meilleur des mondes, la cartographie serait toujours possible. Mais ce n'est pas la réalité ... Avant d'essayer de mapper la valeur de la colonne datatable, je devrais vérifier si cette colonne existe même. Si je ne le fais pas, j'ai une ArgumentException.
Bien sûr, je peux vérifier cela avec un code comme celui-ci:
try
{
//try to map here.
}
catch (ArgumentException)
{ }
mais j'ai pour l'instant 3 colonnes à mapper et tout ou partie pourrait être existant/manquant
Y a-t-il un bon moyen de vérifier si une colonne existe dans un datatable?
Vous pouvez utiliser operator Contains
,
private void ContainColumn(string columnName, DataTable table)
{
DataColumnCollection columns = table.Columns;
if (columns.Contains(columnName))
{
....
}
}
myDataTable.Columns.Contains("col_name")
Pour plusieurs colonnes, vous pouvez utiliser un code similaire à celui donné ci-dessous.Je venais de parcourir cette section et j'ai trouvé une réponse pour vérifier plusieurs colonnes dans 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;
}
Vous pouvez regarder la propriété Columns
d'un DataTable
donné, c'est une liste de toutes les colonnes de la table.
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