J'ai besoin d'itérer le type de colonne columnname et column à partir d'une ligne spécifique. Tous les exemples que j'ai vus ont itéré un datatable complet. Je souhaite transmettre une seule ligne à une fonction pour effectuer un ensemble de traitements conditionnels. Je souhaite séparer le traitement conditionnel pour faciliter la lisibilité.
C'est ce que j'ai
private void doMore(DataRow dr)
{
foreach (DataColumn c in dr.ItemArray) //loop through the columns.
{
MessageBox.Show(c.ColumnName.ToString());
}
}
L'erreur renvoyée est
System.InvalidCastException: Impossible de convertir l'objet de type 'System.String' en type 'System.Data.DataColumn'.
Comment pourrais-je obtenir le nom de la colonne à partir de la ligne ou n'ai-je pas le choix et dois-je transmettre l'intégralité de la datatable à la fonction?
Vous devez toujours passer par la classe DataTable
. Mais vous pouvez le faire en utilisant votre instance DataRow
en utilisant la propriété Table
.
foreach (DataColumn c in dr.Table.Columns) //loop through the columns.
{
MessageBox.Show(c.ColumnName);
}
Vous pouvez faciliter la tâche dans votre code (si vous le faites souvent) en utilisant une extension sur l'objet DataRow, comme:
static class Extensions
{
public static string GetColumn(this DataRow Row, int Ordinal)
{
return Row.Table.Columns[Ordinal].ColumnName;
}
}
Puis appelez-le en utilisant:
string MyColumnName = MyRow.GetColumn(5);
Vous avez besoin de quelque chose comme ça:
foreach(DataColumn c in dr.Table.Columns)
{
MessageBox.Show(c.ColumnName);
}