2010-02-15 105 views
2

我希望能够在datagridview的组合框中显示选定的项目。我已经安装了组合框,并且我已经知道如何从数据库中获取选定的值。我试图完成的任何时候,表单被加载时,组合框中的任何预选值都会自动预先选择,以向用户显示他们最后选择的内容。我有一个存储选择的数据库,他们很容易被访问。同样,如何让选择坚持用户选择的内容,这样每次打开表单时都会记住它们,除非有人改变了他们的选择和保存。我没有看到像通常那样在datagridview组合框中选择的值。有没有人得到这个工作?C#Datagridview组合框选择价值棒

下面是一个例子:

我有一个组合框在一个datagridiew称为测试作为列名嵌入

有4个字段进行选择:

  1. TEST1
  2. test2
  3. test3
  4. test4

可以说这次我选择了test3作为我的选择。我关闭表单并将选择保存到数据库。现在我知道如何从数据库中检索这个值,但是如何让测试3在表单加载为显示成员时显示,并且如果我选择,仍然可以选择另一个?

+0

有一点要记住,当你不编辑单元格的单元格的显示值是毫无关系的组合框控件,所以编辑开始时,会显示而不是值的组合框,它是你的作业来同步组合框中选择的内容和编辑后单元中显示的内容。请参阅下面的答案,了解如何执行此操作。 – 2010-02-16 00:14:39

回答

0

我相信你所需要做的就是在单元上设置.Value,它会自动设置选定的项目。您可以遍历所有单元格并将它们设置为之前选定的值。

1

处理的细胞验证事件如下...

void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
{ 
    if (cell is DataGridViewComboBoxCell) 
    {   
     DataGridViewComboBoxCell cell = DataGridViewComboBoxCell)dataGridView1.CurrentCell; 
     cell.Items.Clear(); 
     cell.Items.Add(e.FormattedValue); 
     dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit); 
     cell.Value = e.FormattedValue; 
    } 
} 

基本上你必须选定值添加到单元格的项目集合,然后设定值=到附加值。如果该值不在项目集合中,则会在单元格上收到DataError事件。

单元格项目集合与组合框项目集合不同。

这是如何处理基于选择设置单元格的值。

如果您处理datagridview的EditingControlShowing事件,您可以在单击时访问组合框控件,并在为用户绘制之前将所选项目设置为单元格的当前值。

void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     if (dataGridView1.CurrentCell is DataGridViewComboBoxCell 
      && e.Control is DataGridViewComboBoxEditingControl) 
     { 
      DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)dataGridView1.CurrentCell; 
      ComboBox ctrl = (ComboBox)e.Control; 
      // Get Currently selected value... 
      string curValue = String.Empty; 
      if (cell.Value != null) 
       curValue = cell.Value.ToString(); 

      //bind data 
      ctrl.DataSource = dataBaseData; 
      //set selected value 
      ctrl.SelectedItem = curValue; 
     } 

    }