C# 一些组合框返回system.data.datarow,而其他组合框则正确返回why

C# 一些组合框返回system.data.datarow,而其他组合框则正确返回why,c#,sql,combobox,C#,Sql,Combobox,下面是以一种形式正确返回的代码 private void LoadCompanyNames() { ds = dataconnector.GetCompanyNames(); dt = ds.Tables[0]; statlbl.Text = "Retrieving Company Details"; cmpycb.DisplayMember = "CompanyName";

下面是以一种形式正确返回的代码

private void LoadCompanyNames()
        {
            ds = dataconnector.GetCompanyNames();
            dt = ds.Tables[0];
            statlbl.Text = "Retrieving Company Details";
            cmpycb.DisplayMember = "CompanyName";
            cmpycb.ValueMember = "CompanyID";
            cmpycb.DataSource = dt;
        }
但是,在第二种形式中,当我调用它时,它返回system.data.datarowview 第二种形式的代码

private void LoadCompanyNames()
{
            ds2 = dataconnector.GetCompanyNames();
            dt2 = ds.Tables[0];
            statlbl.Text = "Retrieving Company Details";
            regnamcb.DisplayMember = "CompanyName";
            regnamcb.ValueMember = "CompanyID";
            regnamcb.DataSource = dt2;
}
另外,我在两种形式中都检查了combobox的属性,它看起来很相似


如果有人知道原因,感谢他们的帮助。

由于组合框尚未加载,因此您将获得
System.Data.DataRowView
作为值。我建议将代码放在一些其他事件中,如所示的
表单

您还可以通过如下方式检查所选值来检查值是否已加载:

if (combobox.SelectedValue == null || 
             combobox.SelectedValue.ToString() == "System.Data.DataRowView")
      return;
      //Rest of the code

由于组合框尚未加载,因此将
System.Data.DataRowView
作为值。我建议将代码放在一些其他事件中,如所示的
表单

您还可以通过如下方式检查所选值来检查值是否已加载:

if (combobox.SelectedValue == null || 
             combobox.SelectedValue.ToString() == "System.Data.DataRowView")
      return;
      //Rest of the code

“返回system.data.datarowview”是什么意思?在组合框项目中,它返回system.data.datarowview三次,而不是在下拉列表中显示项目。看起来您正在其他地方重置
regnamcb.DisplayMember
值。您试图从何处获取组合框的选定值?谢谢Romanoza,但是我没有在代码中进行任何重置,我只在form load中输入regnamcb.enabled=true。在组合框项中,“returns system.data.datarowview”是什么意思,它返回System.data.datarowview三次,而不是在下拉列表中显示项目。看起来您正在其他地方重置
regnamcb.DisplayMember
值。您试图从何处获取组合框的选定值?感谢Romanoza,但是我没有在代码中进行任何这样的重置,我只在表单加载中使用regnamcb.enabled=true。