【问题标题】:Looping through rows in a DataView循环遍历 DataView 中的行
【发布时间】:2009-09-15 15:21:38
【问题描述】:

DataView 对象没有像DataTable 这样的Rows 属性。

如何循环遍历 DataView 的行?

【问题讨论】:

    标签: .net loops dataview


    【解决方案1】:

    DataView 对象本身用于循环遍历 DataView 行。

    DataView 行由DataRowView 对象表示。 DataRowView.Row 属性提供对原始 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
    

    【讨论】:

      【解决方案2】:

      //可以将DataView转为Table。使用 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);
              }
          }
      }
      

      // 或者你可以使用

      // 2.

      dtForms.DefaultView.RowFilter = "ParentFormID='" + drGroup["FormId"].ToString() + "'";
      
      DataTable DTFormFilter = dtForms.DefaultView.ToTable();
      
      foreach (DataRow drFormFilter in DTFormFilter.Rows)
      { 
                                  //Your logic goes here
      }
      

      【讨论】:

      • 这是真的,它有道理,而且有效。我对这种方法的唯一反对意见是将其转换回表格的处理开销
      【解决方案3】:

      我更喜欢以更直接的方式进行。它没有行,但仍然有行数组。

      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();
      

      【讨论】:

        【解决方案4】:

        您可以通过IndexerDefaultView迭代为以下代码:

        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
            // ...
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-05-23
          • 2020-06-14
          • 2011-07-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多