我正在尝试根据所选项目从数据库中获取数据,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
是绑定到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
.