58 votes

Boucler les lignes d'un DataView

Le site DataView n'a pas d'objet Rows comme DataTable .

Comment boucler les lignes d'un DataView ?

135voto

Alex Angas Points 20408

L'objet DataView lui-même est utilisé pour boucler les lignes du DataView.

Les rangées du DataView sont représentées par l'élément DataRowView objet. Le site DataRowView.Row permet d'accéder à la ligne originale du DataTable.

C#

foreach (DataRowView rowView in dataView)
{
    DataRow row = rowView.Row;
    // Do something //
}

VB.NET

For Each rowView As DataRowView in dataView
    Dim row As DataRow = rowView.Row
    ' Do something '
Next

2voto

//Vous pouvez convertir le DataView en Table. using DataView.ToTable() ;

foreach (DataRow drGroup in dtGroups.Rows)
{
    dtForms.DefaultView.RowFilter = "ParentFormID='" + drGroup["FormId"].ToString() + "'";

    if (dtForms.DefaultView.Count > 0)
    {
        foreach (DataRow drForm in dtForms.DefaultView.ToTable().Rows)
        {
            drNew = dtNew.NewRow();

            drNew["FormId"] = drForm["FormId"];
            drNew["FormCaption"] = drForm["FormCaption"];
            drNew["GroupName"] = drGroup["GroupName"];
            dtNew.Rows.Add(drNew);
        }
    }
}

// Ou vous pouvez utiliser

// 2.

dtForms.DefaultView.RowFilter = "ParentFormID='" + drGroup["FormId"].ToString() + "'";

DataTable DTFormFilter = dtForms.DefaultView.ToTable();

foreach (DataRow drFormFilter in DTFormFilter.Rows)
{ 
                            //Your logic goes here
}

1 votes

C'est vrai, c'est logique, et ça marche. Ma seule objection à cette approche est la surcharge du traitement pour le reconvertir en tableau.

2voto

Jon McCain Points 1

Je préfère le faire de manière plus directe. Il n'y a pas de Rows mais il y a quand même un tableau de Rows.

tblCrm.DefaultView.RowFilter = "customertype = 'new'";

qtytotal = 0;
for (int i = 0; i < tblCrm.DefaultView.Count; i++)
{
    result = double.TryParse(tblCrm.DefaultView[i]["qty"].ToString(), out num);
    if (result == false) num = 0;
    qtytotal = qtytotal + num;
}

labQty.Text = qtytotal.ToString();

1voto

Behzad Ebrahimi Points 50

Vous pouvez itérer DefaultView comme le code suivant par Indexer :

DataTable dt = new DataTable();
// add some rows to your table
// ...
dt.DefaultView.Sort = "OneColumnName ASC"; // For example
for (int i = 0; i < dt.Rows.Count; i++)
{
    DataRow oRow = dt.DefaultView[i].Row;
    // Do your stuff with oRow
    // ...
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X