Использование динамического списка пользовательских объектов и не может динамически изменять свойства ячеек dataGrid
Я новичок в размещении в стеке. Я довольно долго искал проблему, похожую на мою. Я пытаюсь изменить флажки в WinForms DataGridView с не только для чтения на только для чтения на основе динамического логического значения объекта.
В режиме отладки он показывает, что изменение произошло, но после его полного прохождения ячейки флажков, которые должны быть доступны только для чтения, по-прежнему позволяют проверять и снимать функциональность. Я оставил закомментированный раздел, чтобы показать, что я пытался сделать это.
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();
Любая помощь будет принята с благодарностью.
1 ответ
С линии m_SingletonForm.ShowDialog();
кажется, что у вас есть этот код до DataGridView
был отображен *. Это слишком рано для применения таких изменений к элементам сетки. Вы также увидите ту же проблему, если ваш код был внутри конструктора для вашей формы.
Самое простое решение этой проблемы - поместить код для настройки ячеек только для чтения в пределах 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
- ячейки редактирования / пользовательского интерфейса и данные, на которых они сидят.