c#中的组合框i需要在组合框中填充两个值

本文关键字:组合 两个 填充 | 更新日期: 2023-09-27 18:15:52

我有一个问题与c#代码的组合框我的代码在这里

cmbProjectName.Items.Clear();
if (obds.Tables.Count > 0 && obds.Tables[0].Rows.Count > 0)
{
    for (int iCount = 0; iCount < obds.Tables[0].Rows.Count; iCount++)
    {
        cmbProjectName.Items.Add(obds.Tables[0].Rows[iCount]["Project_Name"].ToString()); 
    }
}

在组合框中添加值,但我将添加该项目的索引,以便在其他搜索上进一步操作,请建议我…

c#中的组合框i需要在组合框中填充两个值

JAEP使用类的解决方案可以工作。绑定到字典是另一种方法,在这里您不必创建额外的类。来源SO问题

在您的例子中,代码将如下所示。用你想要的索引替换iCount。

cmbProjectName.Items.Clear();
Dictionary<int, string> projectsDictionary = new Dictionary<int, string>();
if (obds.Tables.Count > 0 && obds.Tables[0].Rows.Count > 0)
{
    for (int iCount = 0; iCount < obds.Tables[0].Rows.Count; iCount++)
    {
        projectsDictionary.Add(iCount, obds.Tables[0].Rows[iCount]["Project_Name"].ToString());
    }
}   
cmbProjectName.DataSource = new BindingSource(projectsDictionary, null);
cmbProjectName.DisplayMember = "Value";
cmbProjectName.ValueMember = "Key";

检索键或值的代码。

string value = ((KeyValuePair<int, string>)cmbProjectName.SelectedItem).Value;
int key =  ((KeyValuePair<int, string>)cmbProjectName.SelectedItem).Key;

您可以创建一个类

private class Project
{
     public int ID {get; set;}
     public string Name {get; set;}
     public Project (int _id, string _name)
     {
          ID = _id;
          Name = _name
     }
}

然后,以这种方式转换方法

List<Project> listPrj = new List<Project>();
 if (obds.Tables.Count > 0 && obds.Tables[0].Rows.Count > 0)
 {
        for (int iCount = 0; iCount < obds.Tables[0].Rows.Count; iCount++)
        {
            listPrj.Add(new Project(int.Parse(obds.Tables[0].Rows[iCount]["Project_ID"].ToString()), obds.Tables[0].Rows[iCount]["Project_Name"].ToString());
        }    
 }
cmbProjectName.DisplayMember = Name;
cmbProjectName.ValueMember = ID;
cmbProjectName.DataSource = listPrj;

JAEP的解决方案也可以应用于桌面应用程序。请查看有关ValueMember的MSDN页面。

指定DisplayMemberValueMemberDataSource后,可以使用ComboBo.SelectedTextComboBo.SelectedValue获得选定文本和选定值。

或者您只是想要索引,您可以使用ComboBo.SelectedIndex