web-dev-qa-db-fra.com

DataColumn Name from DataRow (pas DataTable)

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?

40
James Dean

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);
}
72
Daniel Hilgarth

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);
10
Rob Hardy

Vous avez besoin de quelque chose comme ça:

foreach(DataColumn c in dr.Table.Columns)
{
  MessageBox.Show(c.ColumnName);
}
5
Mark Harrell