我仍然是C#的新手,但我使用的是Winforms,我有一个DataGridView,它连接到数据源并正在正确填充。
我还在运行时添加了一个ComboBoxColumn。此ComboBoxColumn连接到数据源,设置了displaymember和valuemember,设置了headertext,然后将列添加到datagrid。连接工作正常,当用户单击comboBox时,将按预期填充。
当用户在网格中完成一个新行时,他显然会选择comboBox中的项目,然后在完成后整行更新到我的数据库。
我的问题是:当再次打开或重新绘制此数据网格时,由于数据源属性而填充它,但是如何让comboBox单元格显示他最初选择的VALUE而不仅仅是空白框。我知道从DB获取值并输入值的代码。理想的情况是,如果我可以将该变量放在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
}
}
这只是显示下拉列表的数据连接。显然,有许多方法与大量代码一起使用。但这不是问题,因为这很好。我不知道如何解决实际显示以前选中的项目作为comboBox文本的问题?
答案 0 :(得分:2)
听起来你正在寻找的是DataPropertyName
的{{1}}属性。此属性创建ComboBoxColumn
的{{1}}与DataSource
的所选值之间的绑定。
例如,假设您在组合框中显示了产品列表。然后,您的DataGridView
ComboBoxColumn
中也会有一个ProductId。像这样:
DataGridView
使用DataSource
设置,您现在将在// 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
之间进行数据绑定。
如果基础数据源绝对不能包含组合框属性的值,那么您需要在自定义代码中处理ComboBoxColumn
的所有保存和值设置。
要设置DataGridView
的所选值,您只需选择单元格,然后设置其ComboBoxColumn
属性。
DataGridViewComboBoxCell