【问题标题】:foreach statement cannot operate on variables of type 'System.Data.DataSet'foreach 语句不能对“System.Data.DataSet”类型的变量进行操作
【发布时间】:2015-09-15 13:35:49
【问题描述】:

我正在尝试为图像创建缩略图并在 DataGrid 中显示该缩略图。我之前做过类似的事情,但是这段代码有点不同,我在 foreach 上遇到了这个错误:

错误 2185 foreach 语句不能对类型变量进行操作 'System.Data.DataSet' 因为 'System.Data.DataSet' 不包含 'GetEnumerator' 的公共定义

 protected void LoadVehicle(string Reg)
    {
        if (Request.QueryString["type"] == "vehicle")
        {
            int vehCount = 1;
            DataSet veh = DataUtils.GetVehicleFromReg(Company.Current.CompanyID, Reg);
            foreach (Vehicle vehicle in veh)
            {
                tabsPOD.Controls.Add(GetDivVehicle(vehCount, vehicle));
                vehCount++;
            }
        }
    }

我试图复制这个类似的代码:

protected void LoadDockets(int JobID)
    {
if (Request.QueryString["type"] == "dbrief")
        {
            int DbriefCount = 1;

            List<JobPieceSerialNo> Serials = JobPieceSerialNo.GetJobPieceSerialsByJob(JobID);
            foreach (JobPieceSerialNo serNo in Serials)
            {
                tabsPOD.Controls.Add(GetDivDbrief(DbriefCount, serNo));
                DbriefCount++;
            }
        }
}

问题是 GetVehicleFromReg 保存在名为 DataUtilies 的文件中,但随后车辆的所有属性都保存在名为 Vehicles 的类文件中。

【问题讨论】:

  • GetVehicleFromReg 的返回类型是什么?你只能在 foreach 中使用 IEnumerable 对象

标签: c# asp.net foreach


【解决方案1】:

问题是,数据集代表整个数据,包括表格和行。 你无法迭代它。您可以迭代所有表:

foreach(DataTable table in dataSet.Tables)

甚至是表格​​中的所有行:

foreach(DataRow row in table.Rows)

如果我可以假设您的数据集中只有一个表,那么您可以编写如下内容:

foreach(DataRow row in veh.Tables[0].Rows)

但 id 取决于数据集的确切数据结构。

【讨论】:

    【解决方案2】:

    DataSet 是表的容器。所以你可以枚举myDataSet.Tables。这是DataTableCollection

    另见 MSDN:https://msdn.microsoft.com/en-us/library/system.data.dataset.tables(v=vs.110).aspx

    【讨论】:

      【解决方案3】:

      数据集由表列表组成。然后每个表都包含一个行列表。因此,您不能简单地对数据集进行 foreach。相反,您需要遍历每个表,并为每个表循环遍历每一行。下面是一个通用的工作示例,说明如何遍历数据集所有表中的所有行。

      private void PrintRows(DataSet dataSet)
      {
          // For each table in the DataSet, print the row values. 
          foreach(DataTable table in dataSet.Tables)
          {
              foreach(DataRow row in table.Rows)
              {
                  foreach (DataColumn column in table.Columns)
                  {
                      Console.WriteLine(row[column]);
                  }
              }
          }
      }
      

      Source:

      【讨论】:

        【解决方案4】:

        您只能在 foreach 循环中使用从 IEnumerable 继承的类型的对象。 IEnumerable 具有 GetEnumrator() 方法,用于遍历元素。 Foreach 在内部调用此 GetEnumerator 来遍历元素。这就是错误状态。 DataSet 具有可用于迭代的 Tables 属性......

        foreach(DataTable table in dataSet.Tables)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-22
          • 1970-01-01
          • 2015-02-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多