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

时间:2011-12-04 01:05:31

标签: c# winforms combobox

我正在尝试根据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() + "'";

有谁可以告诉我可能是什么问题?

3 个答案:

答案 0 :(得分:14)

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为空的情况。

上面代码中的

YourFieldName应该是数据源中包含Name值的字段的名称。如果您在组合框的DisplayMemberValueMember属性中设置了此字段名称,那么您可以使用此属性,以便在此字段更改或您希望时自行节省一些心痛在其他地方重用此代码:

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

或者,您可以使用cmbLeader.SelectedValue

答案 1 :(得分:1)

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

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

DataRow row = ((DataRowView)SelectedItem).Row

答案 2 :(得分:0)

这适用于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;
    }