如何在组合框中显示用户选择的值?

时间:2018-07-26 15:56:34

标签: c# winforms

我有一个DataGridView,它将一个员工ID,一个员工的姓氏和一个员工的名字存储到单元格单击上的字符串中

rEmpID = this.dtDataGridView.CurrentRow.Cells["REVIEWER"].Value.ToString(); 
rEmpFirst = this.dtDataGridView.CurrentRow.Cells["EMP_FIRSTNAME1"].Value.ToString();
rEmpLast = this.dtDataGridView.CurrentRow.Cells["EMP_LASTNAME1"].Value.ToString();

这可以正常工作,并将存储正确的值。此后,将创建一个新表单,其中包含一个公共的组合框。此组合框是数据绑定到sql服务器中包含员工ID,员工姓氏和员工名字的表的数据。组合框的显示成员是员工的姓氏,值成员是员工ID。我希望能够获取rEmpID并更改其在组合框中的选定值。我尝试过

pForm.assComboBox.SelectedItem = pForm.revComboBox.Items.IndexOf(rEmpID);
pForm.revComboBox.SelectedIndex = pForm.revComboBox.FindStringExact(rEmpLast);

2 个答案:

答案 0 :(得分:0)

我无法将其写为评论,所以这是我使用的示例:

void Main()
{
    DataContext db = new DataContext(@"server=.\SQLexpress;trusted_connection=yes;database=Northwind");

    Table<Category> Categories = db.GetTable<Category>();
    Table<Product> Products = db.GetTable<Product>();

    Form f = new Form { Text="ComboBox ornek", Height=200, Width=500 };
    ComboBox cb1 = new ComboBox{ Left=10, Top=10, Width=450, Font=new Font("Courier New",8) };
    ComboBox cb2 = new ComboBox{ Left=10, Top=60, Width=450, Font=new Font("Courier New",8) };

    f.Controls.AddRange( new Control[] {cb1, cb2} );

    cb1.DataSource = Categories.OrderByDescending(c => c.CategoryName).ToList();
    cb1.ValueMember = "CategoryId";
    cb1.DisplayMember = "CategoryName";
    //cb1.SelectedIndex = -1;


    cb1.SelectedIndexChanged += (sender, args) => { 

    var selectedCategory = ((ComboBox)sender).SelectedItem as Category;
    cb2.DataSource = null;
    cb2.Items.Clear();
    if (selectedCategory != null)
    {
      cb2.DataSource = Products.Where (p => p.CategoryId == selectedCategory.CategoryId).ToList();
      cb2.DisplayMember = "ProductName";
      cb2.ValueMember = "ProductId";
    }
    };

    cb1.SelectedValue = 5;
    f.ShowDialog();
}


[Table(Name = "Categories")]
public class Category
{
    [Column]
    public int CategoryId { get; set; }
    [Column]
    public string CategoryName { get; set; }
    [Column]
    public string Description { get; set; }
}

[Table(Name = "Products")]
public class Product
{
    [Column]
    public int ProductId { get; set; }
    [Column]
    public string ProductName { get; set; }
    [Column]
    public int CategoryId { get; set; }
}

答案 1 :(得分:0)

好的,我想出了一个解决方案。不好,但是可以用。在带有组合框的表单上,我添加了一个公共标签。然后,将标签的文本设置为rEmpID值。在Form_Load上,我设置

revComboBox.SelectedValue = label.Text;

还是不太好,但是对于将来以某种方式遇到此问题并且需要快速而又肮脏的修复的任何人来说,这都可以做。