当我想更改 datagridview 的 ComboBox 时,它会自动更改相同 DataGridView 的所有其他组合

Posted

技术标签:

【中文标题】当我想更改 datagridview 的 ComboBox 时,它会自动更改相同 DataGridView 的所有其他组合【英文标题】:when I want to change a ComboBox of datagridview, its automatically change all other combos of same DataGridView 【发布时间】:2012-01-04 15:04:13 【问题描述】:

首先,我必须提到我见过this question,但这并没有帮助我解决我的问题。

根据我的previous question,我将我的DataGridView 保存到了一个XML 文件中。现在,当我使用存储在 XML 文件中的数据加载窗口窗体时,我将填写 DataGridView

我的问题是,当我想根据存储的数据设置一个ComboBox 的值时,另一个ComboBox 的值也会发生变化。我想分别设置每个ComboBox 的值。

我的代码如下:

private void WindowSelection_Load(object sender, EventArgs e)
        
            dataGridSource = DeserializeFromXML();
            foreach (WindowHolder obj in dataGridSource)
            
                int index = dataGridViewWindowSelection.Rows.Add();

                DataGridViewComboBoxColumn combo2 = new DataGridViewComboBoxColumn();
                combo2 = (DataGridViewComboBoxColumn)dataGridViewWindowSelection.Rows[index].Cells["Reader"].OwningColumn;
                combo2.DataSource = readerSource;

                int readerSourceIndex = findReaderSourceIndex(obj.reader);
                if (readerSourceIndex != -1)
                
                    combo2.DefaultCellStyle.NullValue = readerSource[readerSourceIndex];
                
                else
                
                    combo2.DefaultCellStyle.NullValue = readerSource[0];
                

                dataGridViewWindowSelection.Rows[index].Cells["Location"].Value = obj.location;
                dataGridViewWindowSelection.Rows[index].Cells["AlwaysOnTop"].Value = obj.alwaysOnTop;
                dataGridViewWindowSelection.Rows[index].Cells["AlwaysShow"].Value = obj.alwaysShow;     
            

        

【问题讨论】:

【参考方案1】:

您是指要更改combo2.DefaultCellStyle 的那一行吗?

发生这种情况是因为combo2.DefaultCellStyle 是对所有组合的默认单元格样式的引用,因此您没有更改这个组合 - 您正在更改通用默认样式。

如果您希望此组合的样式不同于默认样式(以及其他组合的样式),您可能应该创建一个单独的样式并将其设置为组合 2 的样式。

我猜该语句应该类似于combo2.DefaultCellStyle = ...combo2.SetDefaultCellStyle( ... )

【讨论】:

我有 combo2.DefaultCellStyle 但你能告诉我必须将它设置为什么值吗? 您应该在当前单元格样式的基础上创建一个新的单元格样式,并设置combo2.DefaultCellStyle 以引用新样式。

以上是关于当我想更改 datagridview 的 ComboBox 时,它会自动更改相同 DataGridView 的所有其他组合的主要内容,如果未能解决你的问题,请参考以下文章

动态更改 datagridview 单元格颜色

如何更改 DataGridView 中的列宽?

使用 rowtemplate 更改 datagridview 行高但不起作用

选中复选框后如何更改datagridview中的行颜色

使用 DataGridView 控件和 Access 数据库查询时如何处理错误?

在 DataGridView 中触发复选框值更改事件