【问题标题】:Disable event handler from a method从方法中禁用事件处理程序
【发布时间】:2012-10-26 18:02:53
【问题描述】:

在我的数据网格视图中,我有一些列是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 的颜色。所以 -= 不起作用。

【问题讨论】:

  • 你得到了什么结果?
  • 在普通模式下,我看到了非只读列的颜色。

标签: c# winforms datagridview telerik-grid


【解决方案1】:

更好的方法是在表单启动时设置只读列及其颜色,最好是按名称。见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 是什么?没有人。问题是您很容易迷失在自己的代码中。

【讨论】:

  • 我可以在启动时以编程方式进行只读,但单元格格式如何??
  • @linguini:同样的,在表单启动时设置一次。那么你就不需要改变它了,因为一旦隐藏了,你就不会在意它们的颜色了。
  • @Neolisk:如果用户想看到他们必须区分所有列的内容,这就是我需要颜色的原因
  • @linguini:我不是说删除颜色,我是说着色一次,不要每次都改变它。有可能吗?
  • @linguini:好吧,然后尝试重写您的代码,以考虑上述准则并让我们知道它是如何进行的。
猜你喜欢
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多