在我的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);
答案 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"];