【问题标题】:Getting System.Data.DataRowView while getting value from ComboBox从 ComboBox 获取值时获取 System.Data.DataRowView
【发布时间】:2011-12-04 01:05: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() + "'";

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

【问题讨论】:

    标签: c# winforms combobox


    【解决方案1】:

    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

    【讨论】:

    • 我尝试使用 SelectedValue 仍然得到 System.Data.DataRowView ,如何从 SelectedItem 转换为 DataRowView
    • 谢谢我找到了将 SelectedItem 转换为 DataRowView String str = ((DataRowView)cmbLeader.SelectedItem)["Name"].ToString();
    • @jarus:更新了答案,提供了有关转换为 DataRowView 的详细信息。
    【解决方案2】:

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

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

    DataRow row = ((DataRowView)SelectedItem).Row
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2021-09-18
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        • 2020-09-09
        • 1970-01-01
        • 1970-01-01
        • 2013-09-26
        • 2021-06-14
        相关资源
        最近更新 更多