用数据库中的数据填充组合框

Fill Combobox with Data from Database

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

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

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

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

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 object(非常基础):

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

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

和表单加载方法上填写Combobox的代码:

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

您只需设置 ValueMember 和 DisplayMember 属性:

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

CDclass应该定义如下:

public class CD
{
    public string Name {get; set; }
    public int ID {get; private set;}

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

@jesus Lopez 给出的答案是正确的。但是我们需要检查 valuemember 字符串是否区分大小写。否则会抛出 "Could not bind to the new value member." 错误。

Link: 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.

干杯!