jar*_*rus 7 c# combobox winforms
我正在尝试根据所选项目从数据库中获取数据,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() + "'";
Run Code Online (Sandbox Code Playgroud)
谁能告诉我可能是什么问题?
com*_*ech 16
SelectedItem是绑定到ComboBox数据源的数据对象,在本例中是DataRowView.
您需要转换SelectedItem为DataRowView,然后从中检索适当的值.
你可以这样做:
DataRowView oDataRowView = cmbLeader.SelectedItem as DataRowView;
string sValue = "";
if (oDataRowView != null) {
sValue = oDataRowView.Row["YourFieldName"] as string;
}
Run Code Online (Sandbox Code Playgroud)
然后替换(在你的CommandText中):
cmbLeader.SelectedItem.ToString()
Run Code Online (Sandbox Code Playgroud)
有:
sValue
Run Code Online (Sandbox Code Playgroud)
这将优雅地处理DataRowView为null的情况.
YourFieldName在上面的代码中应该是数据源中包含Name值的字段的名称.如果您在组合框DisplayMember或ValueMember属性中设置了此字段名称,那么您可以使用此属性,以便在此字段更改时或在您希望在其他位置重用此代码时为自己节省一些心痛:
sValue = oDataRowView.Row[cmbLeader.DisplayMember] as string;
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用cmbLeader.SelectedValue.