gpt4 book ai didi

C# DataGridViewCheckBoxColumn 隐藏/灰显

转载 作者:太空狗 更新时间:2023-10-30 00:12:05 26 4
gpt4 key购买 nike

我有一个包含多列和多行数据的 DataGridView。其中一列是 DataGridViewCheckBoxColumn 并且(基于行中的其他数据)我想要“隐藏”某些行中的复选框的选项。我知道如何将其设置为只读,但我希望它完全不显示或至少显示与其他复选框不同(变灰)。这可能吗?

最佳答案

一些解决方法:将其设置为只读并将颜色改回灰色。对于一个特定的单元格:

dataGridView1.Rows[2].Cells[1].Style.BackColor =  Color.LightGray;
dataGridView1.Rows[2].Cells[1].ReadOnly = true;

或者,更好但更“复杂”的解决方案:
假设您有 2 列:第一列带有数字,第二列带有复选框,当数字 > 2 时不应显示。您可以处理 CellPainting 事件,仅绘制边框(例如背景)并中断绘制休息。为 DataGridView 添加事件 CellPainting(可选择测试 DBNull 值以避免在空行中添加新数据时出现异常):

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
//check only for cells of second column, except header
if ((e.ColumnIndex == 1) && (e.RowIndex > -1))
{
//make sure not a null value
if (dataGridView1.Rows[e.RowIndex].Cells[0].Value != DBNull.Value)
{
//put condition when not to paint checkbox
if (Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].Value) > 2)
{
e.Paint(e.ClipBounds, DataGridViewPaintParts.Border | DataGridViewPaintParts.Background); //put what to draw
e.Handled = true; //skip rest of painting event
}
}
}
}

它应该可以工作,但是如果您在检查条件的第一列中手动更改值,则必须刷新第二个单元格,因此添加另一个事件,如 CellValueChanged:

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0)
{
dataGridView1.InvalidateCell(1, e.RowIndex);
}
}

关于C# DataGridViewCheckBoxColumn 隐藏/灰显,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7664115/

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