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