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

本文关键字:获取 ComboBox System Data DataRowView | 更新日期: 2023-09-27 18:16:30

我试图根据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() + "'";
谁能告诉我可能是什么问题?

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

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值的字段的名称。如果您已经在组合框的DisplayMemberValueMember属性中设置了此字段名称,那么您可以使用此属性来代替,以便在此字段更改或想要在其他地方重用此代码时节省一些麻烦:

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

也可以使用cmbLeader.SelectedValue

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

要获取相关的DataRow,可以调用
DataRow row = ((DataRowView)SelectedItem).Row

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

 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;
    }