foreach语句不能对类型为System.Data.DataSet'的变量进行操作。

时间:2015-09-15 13:35:50

标签: c# asp.net foreach

我正在尝试为图像创建缩略图并在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的类文件中。

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

数据集由表格列表组成。然后每个表包含一个行列表。所以你不能简单地对数据集做一个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:

答案 2 :(得分:2)

问题是,该数据集表示包含表和行的整个数据。 你不能迭代它。您可以迭代所有表:

foreach(DataTable table in dataSet.Tables)

甚至表中的所有行:

foreach(DataRow row in table.Rows)

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

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

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

答案 3 :(得分:0)

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

foreach(DataTable table in dataSet.Tables)