代码之家  ›  专栏  ›  技术社区  ›  Zinx

C.NET组合框控件

  •  2
  • Zinx  · 技术社区  · 15 年前

    我有一个应用程序正在使用C.NET开发带有.NET Compact框架的手持设备。我面临的问题是ComboBox控件的行为非常不重要,有时它显示内容,但有时它只是在ComboBox中显示System.DataRow类型的字符串。虽然它显示了这个system.datarow字符串,但它仍然有它的值。我在ComboBox上有一个SelectedIndexChanged事件,它返回正确的值,即使用户界面显示System.DataRow作为显示。

    事先谢谢。 干杯。

    2 回复  |  直到 15 年前
        1
  •  3
  •   MusiGenesis    15 年前

    在加载组合框的代码中,可能有如下内容:

    foreach (DataRow row in YourDataTable.Rows)
    {
        YourComboBox.Items.Add(row);
    }
    

    基本上,将每个数据行加载到组合框中,而组合框使用的是DataRow的默认toString()值,即“system.data.dataRow”。您需要用其中一个数据行加载ComboxBox 领域 ,像这样:

    foreach (DataRow row in YourDataTable.Rows)
    {
        YourComboBox.Items.Add(row["column1"].ToString());
    }
    

    更新 :您的DisplayMember属性中可能有拼写错误。此代码:

    DataTable dt = new DataTable();
    dt.Columns.Add("ID");
    dt.Columns.Add("Name");
    dt.Rows.Add(1, "Bob");
    dt.Rows.Add(2, "Doug");
    dt.Rows.Add(3, "Beth");
    comboBox1.ValueMember = "ID";
    comboBox1.DisplayMember = "Name";
    comboBox1.DataSource = dt;
    

    正常工作,如预期的那样,但DisplayMember区分大小写,因此如果我将第二行改为最后一行:

    comboBox1.DisplayMember = "name";
    

    组合框中的所有项都称为“System.Data.DataRowView”。我想你只要检查一下你的列名就行了。

        2
  •  1
  •   Zinx    15 年前

    谢谢你的帮助。我解决了问题。因此,方案是用数据库中的值填充一个组合框。数据库查询正在返回三列ID、名称和大小。但对于组合框,我只需要两列名称和ID。我从数据库中获取值,然后在客户机端添加一个新行到该数据表中,然后填充到组合框中。在这个客户端行中,我只添加了2列名称和ID,但没有添加大小。这东西把所有东西都塞进去了。它的Wierd,但它现在工作得很好。我想我会做更多的测试,看看这个错误是否会再次出现。

    无论如何,谢谢你的帮助。