无法将类型为“System.Data.DataRowView”的对象强制转换为System.IConvertible类型

时间:2011-04-04 11:00:13

标签: c# .net visual-studio

在我的c#winforms中,我将数据绑定到DataTable中的DropDownList。数据在表单中可见,但我无法获取此DropDownList的SelectedValue。

如果我访问SelectedValue,则会显示以下错误:

unable to cast the object of type 'System.Data.DataRowView' to type System.IConvertible.

并且应用程序关闭。

有两个或三个其他DropDownList以相同的方式绑定,它们都运行良好。

DropDownList的代码是:

LstDriverName.DisplayMember = "DriverName";
LstDriverName.ValueMember = "Driverid";
DriverDetail Driverdetails = new DriverDetail(Constr);
LstDriverName.DataSource = Driverdetails.SelectAllNames();

这里Driverdetails.SelectAllNames()返回一个DataTable。

如果我检查即时窗口中的值:

?LstDriverName.SelectedValue.ToString()
"System.Data.DataRowView"

以及消息显示的位置:

NewBill = new TransportationBill(Constr);
NewBill.DriverId = Convert.ToInt32(LstDriver.SelectedValue);

2 个答案:

答案 0 :(得分:0)

您可以尝试这样做:

NewBill = new TransportationBill(Constr);
NewBill.DriverId = Convert.ToInt32(LstDriver.SelectedValue.Item["Driverid"]);

但是,您收到类型为System.Data.DataRowView

的项目非常奇怪

答案 1 :(得分:-1)

由于您已绑定到DataTable,因此各个项的类型为DataRowView。这些与DataRow非常相似:它们包含包含数据的列。

尝试将整行数据转换为整数是没有意义的。你可能想要的是更像这样的东西:

var selectedRow = (DataRowView) LstDriver.SelectedValue;
NewBill.DriverId = Convert.ToInt32(selectedRow["Driverid"]);

您想要转换所选行的“Driverid”列,而不是整行。

实际上,如果“Driverid”列已经是整数,那么您不需要转换它。代替:

NewBill.DriverId = (int) selectedRow["Driverid"];