从方法中禁用事件处理程序

时间:2012-10-26 18:02:54

标签: c# winforms datagridview telerik-grid

在我的datagridview中,我有一些列是read only,所以我给了一些颜色。 当我在预先视图中加载DGV时,所有列都包括只读。 当用户在普通视图上隐藏时,我想只显示正常的可用列,并隐藏只读列和颜色。

我正在使用telerik并使用radgrid。

我尝试了以下方法,但它没有用。有没有更好的方法呢?谢谢。

private void normalToolStripMenuItem_Click(object sender, EventArgs e)//Normal View
{
    DTURradGridView.Columns[2].IsVisible = false;
    DTURradGridView.Columns[3].IsVisible = false;
    DTURradGridView.Columns[4].IsVisible = false;
    DTURradGridView.Columns[5].IsVisible = false;
    DTURradGridView.Columns[7].IsVisible = false;
    DTURradGridView.Columns[11].IsVisible = false;

    DTURradGridView.Columns[2].ReadOnly = false;
    DTURradGridView.Columns[3].ReadOnly = false;
    DTURradGridView.Columns[4].ReadOnly = false;
    DTURradGridView.Columns[5].ReadOnly = false;
    DTURradGridView.Columns[7].ReadOnly = false;
    DTURradGridView.Columns[11].ReadOnly = false;

    DTURradGridView.CellFormatting -= DTURradGridView_CellFormatting;
}

private void advancedToolStripMenuItem_Click(object sender, EventArgs e) //Advanced View
{
    DTURradGridView.Columns[2].IsVisible = true;
    DTURradGridView.Columns[3].IsVisible = true;
    DTURradGridView.Columns[4].IsVisible = true;
    DTURradGridView.Columns[5].IsVisible = true;
    DTURradGridView.Columns[7].IsVisible = true;
    DTURradGridView.Columns[11].IsVisible = true;

    DTURradGridView.Columns[2].ReadOnly = true;
    DTURradGridView.Columns[3].ReadOnly = true;
    DTURradGridView.Columns[4].ReadOnly = true;
    DTURradGridView.Columns[5].ReadOnly = true;
    DTURradGridView.Columns[7].ReadOnly = true;
    DTURradGridView.Columns[11].ReadOnly = true;

    DTURradGridView.CellFormatting += DTURradGridView_CellFormatting;   
}

private void DTURradGridView_CellFormatting(object sender, CellFormattingEventArgs e)
{
    if (e.CellElement.ColumnIndex != 2 && e.CellElement.ColumnIndex != 3 && e.CellElement.ColumnIndex != 4
    && e.CellElement.ColumnIndex != 5 && e.CellElement.ColumnIndex != 7 && e.CellElement.ColumnIndex != 11) return;

    e.CellElement.DrawFill = true;
    e.CellElement.NumberOfColors = 1;
    e.CellElement.BackColor = Color.LightSlateGray;
    e.CellElement.GradientStyle = GradientStyles.Linear;    
}

当我点击普通视图时,我看到col索引2,3,4,5的颜色。所以 - =不起作用。

1 个答案:

答案 0 :(得分:0)

更好的方法是在表单启动时设置只读列及其颜色,最好是按名称。见How to change color of a column in datagridview?

然后遍历列并隐藏或显示那些只读的内容,具体取决于您使用的模式。将其硬编码为不是一个好习惯:

DTURradGridView.Columns[2].ReadOnly = true;
DTURradGridView.Columns[3].ReadOnly = true;
DTURradGridView.Columns[4].ReadOnly = true;

谁知道什么是2,3,4?没有人。问题是你很容易迷失在自己的代码中。