从ComboBox获取值时获取System.Data.DataRowView

我正在尝试根据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 DataRowViewDataRowView ,然后从中检索适当的值。

你可以这样做:

 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值的数据源中字段的名称。 如果您在combobox的DisplayMemberValueMember属性中设置了此字段名称,那么您可以使用此属性,以便在此字段更改时或在您希望在其他位置重用此代码时为自己节省一些心痛:

  sValue = oDataRowView.Row[cmbLeader.DisplayMember] as string; 

或者,您可以使用cmbLeader.SelectedValue

当您绑定到ADO DataTable您实际上绑定到ADO DataView (它是DataRowViews的集合)。 这意味着SelectedItem将始终是DataRowView

要获取关联的DataRow,您可以调用

 DataRow row = ((DataRowView)SelectedItem).Row 

这适用于DropDownList。 许多开发人员希望从下拉列表中获取数据成员值,这将有助于以简单的方式获取价值…如果有任何建议评论如下!

  public string RadDropDownSelectValue(RadDropDownList radDropDownList) { string str = ""; foreach (RadListDataItem item in radDropDownList.SelectedItems) { DataRowView dv = (DataRowView)item.Value; str = dv.Row[0].ToString(); } return str; }