使用自定义对象的动态列表,无法动态更改dataGrid的单元格属性

我是新来发布在Stack上的。 我已经搜索了一段与我类似的问题。 我试图动态地根据对象的布尔值将WinForms DataGridView中的复选框从非只读更改为只读。

它在调试模式下显示已发生更改,但一旦完全运行,应该只读取的复选框单元仍然允许检查和取消选中function。 我已经离开了已注释的部分,以表明我已尝试这样做。

m_SingletonForm.dataGridView1.DataSource = list; m_SingletonForm.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; m_SingletonForm.dataGridView1.Columns["StoreGroup"].ReadOnly = true; m_SingletonForm.dataGridView1.Columns["Message"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; m_SingletonForm.dataGridView1[0, 0].ReadOnly = true; foreach (DataGridViewRow row in m_SingletonForm.dataGridView1.Rows) { //var isChecked = Convert.ToBoolean(row.Cells["SendFile"].Value); //if (!isChecked) //{ //m_SingletonForm.dataGridView1.Rows[0].Cells["SendFile"].Style.BackColor = Color.Red; //m_SingletonForm.dataGridView1.Rows[0].Cells["SendFile"].ReadOnly = true; //m_SingletonForm.dataGridView1.Rows[row.Index].Cells["SendFile"].Style.BackColor = Color.Red; //m_SingletonForm.dataGridView1.Rows[row.Index].Cells["SendFile"].ReadOnly = true; //m_SingletonForm.dataGridView1["SendFile", row.Index].ReadOnly = true; //m_SingletonForm.dataGridView1["SendFile", row.Index].Style.BackColor = Color.Red; // } } m_SingletonForm.label1.Text = message; m_SingletonForm.Text = title; MessageBox.Show(m_SingletonForm.dataGridView1[0, 0].ReadOnly.ToString()); m_SingletonForm.ShowDialog(); 

任何帮助将不胜感激。

从行m_SingletonForm.ShowDialog(); 在显示DataGridView *之前,您似乎已经拥有此代码。 对于要应用的网格项的此类更改,这太早。 如果您的代码位于表单的构造函数中,您也会看到相同的问题。

解决该问题的最简单方法是将代码设置为在DataBindingComplete事件处理程序中只DataBindingComplete 。 像这样的东西:

 // Attach the event m_SingletonForm.dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete); // And the code for the handler void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) { foreach (DataGridViewRow row in m_SingletonForm.dataGridView1.Rows) { var isChecked = Convert.ToBoolean(row.Cells["SendFile"].Value); if (!isChecked) { m_SingletonForm.dataGridView1.Rows[0].Cells["SendFile"].Style.BackColor = Color.Red; m_SingletonForm.dataGridView1.Rows[0].Cells["SendFile"].ReadOnly = true; m_SingletonForm.dataGridView1.Rows[row.Index].Cells["SendFile"].Style.BackColor = Color.Red; m_SingletonForm.dataGridView1.Rows[row.Index].Cells["SendFile"].ReadOnly = true; m_SingletonForm.dataGridView1["SendFile", row.Index].ReadOnly = true; m_SingletonForm.dataGridView1["SendFile", row.Index].Style.BackColor = Color.Red; } } } 

*我从来没有100%弄清楚为什么会这样 – 我相信它与DataGridView中有两组单元格相关 – 编辑/ ui单元格和它们所处的数据。