【问题标题】:Fill Combobox with Data from Database用数据库中的数据填充组合框
【发布时间】:2015-07-16 01:39:14
【问题描述】:

我在 SQL Server 上有一个 Windows 窗体和一个数据库,名为 RecordStore。我有一张 CD 表(称为 [CD-table]),我正在尝试从中提取数据并以这种形式显示。

我希望表单有一个 combobox 来显示 CD 专辑标题 ("CDname"),但我希望能够从 Combobox.SelectedValue 获取 CD ID # ("CDID")属性 - 我会将其转换为 int。

目前,我不确定如何获取这两条数据,除非我将其制成一个对象,但它只是在combobox 中显示ProjectName.CD。我想访问 CDID,因为我有一个 DataGridView,我想只填充 CD 数据,我将其设置为 DataTable,然后将 DataTable 设置为 DataGridView's DataSource

获取 CD 数据并返回 CD 对象列表的方法。

private string myconnectionString = @"/*connection string*/";
public List<CD> GetCDList()
{
    List<CD> CDList = new List<CD>();
    SqlConnection myConnection;
    SqlCommand myCmd;
    SqlDataReader myReader;
    myConnection = new SqlConnection(myconnectionString);
    myCmd = new SqlCommand("SELECT CDID, CDname FROM [CD-table]", myConnection);
    try
    {
        myConnection.Open();
        myReader = myCmd.ExecuteReader();
        while (myReader.Read())
        {
            CD newCD = new CD((int)myReader["CDID"]);
            newCD.name = myReader["CDname"].ToString().Trim();
            CDList.Add(newCD);
        }
        myReader.Close();
        myConnection.Close();
    }
    finally
    {
        myConnection.Close();
    }

    return CDList;
}

CD 对象(非常基本):

public class CD
{
    public string name;
    private int ID;

    public CD(int _ID)
    {
        ID = _ID;
    }
}

以及在表单加载方法上填写Combobox的代码:

List<CD> myList = myDataAccess.GetCDList();
AlbumCombobox.DataSource = myList;

【问题讨论】:

    标签: c# sql-server winforms ado.net sqlclient


    【解决方案1】:

    您只需要设置 ValueMember 和 DisplayMember 属性:

    List<CD> myList = myDataAccess.GetCDList();
    AlbumCombobox.DataSource = myList;
    AlbumCombobox.DisplayMember = "Name";
    AlbumCombobox.ValueMember = "ID";
    

    CD 类应定义如下:

    public class CD
    {
        public string Name {get; set; }
        public int ID {get; private set;}
    
        public CD(int _ID)
        {
            ID = _ID;
        }
    }
    

    【讨论】:

    • 获得“无法绑定到新值成员”。 ValueMember 行上的错误。有什么想法吗?
    【解决方案2】:

    @jesus Lopez 给出的答案是正确的。但是我们需要检查 valuemember 字符串是否区分大小写。否则会抛出“无法绑定到新的值成员”。错误。

    链接:http://www.fmsinc.com/free/NewTips/NET/NETtip37.asp

    List<CD> myList = myDataAccess.GetCDList();
    AlbumCombobox.DataSource = myList;
    AlbumCombobox.DisplayMember = "name";
    AlbumCombobox.ValueMember = "ID"; // case sensitive.
    

    干杯!

    【讨论】:

    • 不幸的是,我遇到了这个错误。此外,在调试时,AlbumCombobox.DisplayMember = "name"; 似乎没有做任何事情。如果我尝试AlbumCombobox.DisplayMember = myList[0].name,它会在调试时显示正确的数据,但仍然会在“ID”上出现错误。不知道该怎么办!
    猜你喜欢
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多