我试图根据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值的数据源中字段的名称。如果您已在组合框的DisplayMemberValueMember属性中设置了此字段名称,则可以改用此属性,以便在此字段更改或要在其他地方重用此代码时免去自己的烦恼:
   sValue = oDataRowView.Row[cmbLeader.DisplayMember] as string;

另外,您可以使用cmbLeader.SelectedValue

关于c# - 从ComboBox获取值的同时获取System.Data.DataRowView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8372464/

10-13 06:50