gpt4 book ai didi

c# - 如何更改动态添加的 DataGridViewComboBoxColumn 的组合框单元格的文本?

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:35 27 4
gpt4 key购买 nike

我对 C# 还是有点陌生​​,但我使用的是 Winforms 并且我有一个 DataGridView,它连接到数据源并且正在正确填充。

我还在运行时添加了一个 ComboBoxColumn。此 ComboBoxColumn 连接到数据源,设置了 displaymember 和 valuemember,设置了标题文本,然后将列添加到数据网格。连接工作正常,当用户单击时,组合框按预期填充。

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

我的问题是:当再次打开或重新绘制此数据网格时,由于数据源属性,它会被填充,但我如何让组合框单元格显示他最初选择的值,而不仅仅是一个空白框。我知道从数据库中获取值并输入值的代码。理想的情况是我可以将该变量放在组合框的显示中。请记住,组合框仍然是数据绑定(bind)的,以便用户可以根据需要编辑值?

我知道在普通的组合框控件中,我应该只设置 .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
}
}

这仅显示下拉列表的数据连接。显然有很多方法正在使用大量代码。但这不是问题,因为它工作正常。我不知道如何解决将先前选择的项目实际显示为组合框文本的问题?

最佳答案

听起来您正在寻找的是 ComboBoxColumnDataPropertyName 属性。此属性在 DataGridViewDataSourceComboBoxColumn 的选定值之间创建绑定(bind)。

例如,假设您在组合框中显示了一个产品列表。然后,您的 DataGridView DataSource 中也会有一个 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 之间进行数据绑定(bind)。

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

要设置 DataGridViewComboBoxCell 的选定值,您只需选择单元格,然后设置其 Value 属性即可。

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

关于c# - 如何更改动态添加的 DataGridViewComboBoxColumn 的组合框单元格的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6720727/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com