我有以下代码
public void ConstructUpdateableInventoryItemsOnThisPage(DataView dv)
{
//DataRowView dv = null;
string sTemp = "";
foreach (DataRow dr in dv)
{
if (sTemp.Length > 0)
{
sTemp += ",";
sTemp += dr["inventory_id"];
}
}
//foreach (DataRow dr in dv)
//{
// if (sTemp.Length > 0)
// sTemp += ",";
// sTemp += dr.ItemArray[Convert.ToInt32("inventory_id")]; //added ItemArray keyword, square brackets and syntax to convert from string to int 10/21/15 Max //
//}
mUpdateableInventoryItemsOnThisPage = sTemp;
}
当我去执行代码时,我收到以下错误:
无效的Cast异常 - 无法将对象类型'System.Data.DataRowView'转换为'System.Data.DataRow'类型
我知道问题出现在 foreach
语句中的某处,以防我包含原始代码(已注释掉)以及我所做的更改(未注释掉) . 我不确定是什么导致这可能有人指出我在语法上正确的方向
哦顺便说一句,这是从视觉基础改变的,如果这有助于任何
3 回答
DataRowView
不可转换为DataRow
. 您可以在foreach
中使用DataRowView
而不是DataRow
. 像这样:或者作为LINQ的更好解决方案:
你可以做:
这应该解决问题,
DataView
中的项目是DataRowView
而不是DataRow
和 since foreach does a silent explicit conversion ,您在编译时看不到错误 . (更多here)您还可以使用
String.Join
获取所需的字符串,如:如果你想在你的字符串前面有
,
那么你可以在string.Join
之前使用连接DataView不是DataRow类型的可枚举 . 它不是数组或行列表 . 它有一行可以使用Row属性dv.Row访问 .
您可以爬上层次结构并向下返回行:dv.Table.Rows
https://msdn.microsoft.com/en-us/library/system.data.datarowview.dataview(v=vs.110).aspx