我试图根据ComboBox
中选择的项目从数据库中获取数据,但是当我尝试访问选定的ComboBox
项时,它给了我“System.Data.DataRowView” [...?]
我在另一个函数中使用简单的选择查询做了同样的事情,并且工作正常,但我不知道为什么它在此查询中不起作用:
_dataAdapter.SelectCommand.CommandText = "SELECT lt.Name FROM Leader as lt LEFT JOIN Material as mt ON lt.Student_id=mt.lead_id where lt.Name=" + "'" + cmbLeader.SelectedItem.ToString() + "'";
谁能告诉我可能是什么问题?
最佳答案
SelectedItem
是绑定(bind)到ComboBox
数据源的数据对象,在本例中为DataRowView
。
您需要将SelectedItem
转换为DataRowView
,然后从中获取适当的值。
您可以按照以下步骤进行操作:
DataRowView oDataRowView = cmbLeader.SelectedItem as DataRowView;
string sValue = "";
if (oDataRowView != null) {
sValue = oDataRowView.Row["YourFieldName"] as string;
}
然后替换(在您的CommandText中):
cmbLeader.SelectedItem.ToString()
和:
sValue
这将很好地处理DataRowView为null的情况。
上面的代码中的
YourFieldName
应该是包含Name值的数据源中字段的名称。如果您已在组合框的DisplayMember
或ValueMember
属性中设置了此字段名称,则可以改用此属性,以便在此字段更改或要在其他地方重用此代码时免去自己的烦恼: sValue = oDataRowView.Row[cmbLeader.DisplayMember] as string;
另外,您可以使用
cmbLeader.SelectedValue
。关于c# - 从ComboBox获取值的同时获取System.Data.DataRowView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8372464/