2011-07-16 43 views
1

我对C#还是有点新,但我使用的Winforms,我有一个DataGridView连接到数据源,并正在填充正确。如何更改动态添加的DataGridViewComboBoxColumn的组合框单元格的文本?

我也在运行时添加了一个ComboBoxColumn。这个ComboBoxColumn被连接到一个数据源,displaymember和valuemember被设置,headertext被设置,然后列被添加到数据网格中。连接工作得很好,当用户单击组合框时按预期填充。

当用户在网格中完成一个新行时,他显然会选择comboBox中的项目,然后在完成时将整行更新到我的数据库。

我的问题是:当这个数据网格再次打开或重新绘制它由于datasource属性填充,但我怎么让comboBox单元格显示他最初选择的VALUE,而不是一个空白框。我知道从数据库中获取价值并输入价值的代码。理想情况是,如果我可以将该变量放在comboBox的显示中。请记住,comboBox仍然是数据绑定的,以便用户可以编辑该值,如果他愿意的话?

我知道在一个普通的comboBox控件中,我应该设置.Text属性。但DataGridViewComboBox不具有相同的属性。

下面是实际的数据连接的代码并添加comboBoxColumn的:

public void AddComboBoxColumn(DataGridView datagridName, DataTable table, string headerText, int columnIndex) 
    { 
     DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn(); 

     GetDisplayAndValueMembers(table, headerText); //Calls method that gets the datasource, displaymember, valuemember depending on column 

     column.DataSource = tableRef; //sets datasource to table referenced by column 
     column.DisplayMember = displayMember; //sets displaymember 
     column.ValueMember = valueMember; //sets valuemember 

     column.HeaderText = headerText; //changes headertext to displayed text 

     if (newColumnIndex == 0) 
      datagridName.Columns.Add(column); //added to end of datagrid 
     else 
     { 
      datagridName.Columns.RemoveAt(columnIndex); 
      datagridName.Columns.Insert(newColumnIndex, column); //added in specific index if needed 
     } 
    } 

这只是显示下拉的dataconnection。显然有很多方法正在使用大量的代码。但这不是问题,因为这工作正常。我不知道如何去实际显示以前选择的项目作为组合框的文本的问题?

+1

也许提高你的问题来显示相关的代码? –

回答

1

这听起来像你正在寻找的是ComboBoxColumnDataPropertyName财产。此属性创建DataGridViewDataSourceComboBoxColumn的选定值之间的绑定。

例如,假设您有一个显示在组合框中的产品列表。然后,您将在您的DataGridViewDataSource中有一个ProductId。事情是这样的:

// There Orders is a data table coming from the db which includes the product id column 
dataGridView1.DataSource = Orders; 

// You set up your column just the same, with the DisplayMember and ValueMember 
DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();   
GetDisplayAndValueMembers(table, headerText); 
column.DataSource = tableRef; //sets datasource to table referenced by column 
column.DisplayMember = displayMember; //sets displaymember 
column.ValueMember = valueMember; //sets valuemember  
column.HeaderText = headerText; //changes headertext to displayed text 

//Now you also set the DataPropertyName 
column.DataPropertyName = "ProductId"; // this is the name of a column or property from the grid datasource 

dataGridView1.Columns.Add(column); 

随着DataPropertyName集你现在将有ComboBoxColumnDataGridView之间的数据绑定。

如果您的基础数据源绝对不能具有组合框属性的值,那么您需要在自定义代码中处理所有此ComboBoxColumn的保存和值设置。

要设置DataGridViewComboBoxCell的所选值,请选择该单元格,然后设置它的Value属性。

dataGridView1.Rows["rowname"].Cells["columnname"].Value = valueFromDb; 
+0

这工作完美! column.DataPropertyName完全解决了它。我不必添加dataGridView.Value语句。非常感谢大卫。 –

相关问题