当我在 C# Windows 应用程序中选中复选框时,如何更改数据网格视图行中的颜色
本文关键字:数据网 数据 何更改 网格 视图 颜色 Windows 应用程序 复选框 | 更新日期: 2023-09-27 18:35:48
当我在 C# Windows 应用程序中选中复选框时,如何更改 DataGridView 行中
的颜色?我有用于选择一个复选框的代码位于 DataGridView 的标题列中,它选中所有复选框并更改 DataGridView 行中的背景颜色,但我希望选中一个复选框时,相应的 DataGridView 行将更改颜色,请帮助我
private void Form1_Load_1(object sender, EventArgs e)
{
this.ckBox.CheckedChanged += new System.EventHandler(this.ckBox_CheckedChanged);
this.dataGridView1.Controls.Add(ckBox);
}
void ckBox_CheckedChanged(object sender, EventArgs e)
{
for (int j = 0; j < this.dataGridView1.RowCount; j++)
{
this.dataGridView1[2, j].Value = this.ckBox.Checked;
}
foreach (DataGridViewRow row in dataGridView1.Rows)
{
DataGridViewCheckBoxCell check = row.Cells["Chk"] as DataGridViewCheckBoxCell;
if (Convert.ToBoolean(check.Value) == true)
row.DefaultCellStyle.BackColor = Color.Wheat;
else
row.DefaultCellStyle.BackColor = Color.White;
}
this.dataGridView1.EndEdit();
}
将CheckBox
添加到标头的代码已经运行良好。
要将CheckBox
向右对齐,您需要计算位置,如下所示:
ckBox.Location = new Point(rect.Right - ckBox.Width - 4, rect.Top + 4);
我添加了一些像素填充。您需要使列足够宽,以防止CheckBox
与标题文本重叠。
但是,每当用户更改列的宽度或列顺序或添加新列时,都需要重复对齐。
所以我建议将对齐代码移动到一个可以在需要时调用的函数中:
void layoutCheckBox()
{
Rectangle rect = this.dataGridView1.GetCellDisplayRectangle(2, -1, true);
ckBox.Location = new Point(rect.Right - ckBox.Width - 4, rect.Top + 4);
}
例如这里:
private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
layoutCheckBox();
}
然后是一些,如前所述;取决于用户可以做什么。
至于CheckChanged
代码,它似乎有效,前提是列Chk
中的单元格确实都DataGridViewCheckBoxCells
..