我试图根据 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/