在DataBound DataGridView中有选择地禁用行的单元格

时间:2010-09-02 14:14:59

标签: c# winforms datagridview

我需要能够根据布尔标志关闭一行中的一些单元格。如果该标志为真,我应该启用所有内容并像往常一样可见。如果该标志为false,则我需要使该行中的几个单元格不可见且只读。

2 个答案:

答案 0 :(得分:1)

您可以处理CellPainting事件,检查那里的标志状态,然后绘制要显示/隐藏的单元格。

MSDN上的这个链接可以帮助您:

http://msdn.microsoft.com/en-us/library/hta8z9sz.aspx

答案 1 :(得分:0)

这是我的例子。为CellPainting添加事件处理程序,然后确定该项是否已禁用。如果它被禁用,那么只需绘制背景并使单元格为只读。

我有一个绑定到数据网格的自定义类BoardStatusView,它有一个布尔函数,用于确定单元格是否应该有一个复选框(Upgradeable()

    private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
        if (e.RowIndex >= 0)
        {
            BoardStatusView bs = dataGridView1.Rows[e.RowIndex].DataBoundItem as BoardStatusView;
            bool disabled = !bs.Upgradeable();
            dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly = disabled;
            if (disabled && e.ColumnIndex == 0)
            {
                e.PaintBackground(e.ClipBounds, false);
                e.Handled = true;
            }
        }
    }