检测是否在InitializeRow事件上选择了行

时间:2013-03-28 10:32:02

标签: c# infragistics

我有一个ultrawingrid填充了联系人 - 其中一些需要根据联系人的属性以不同的颜色方案显示。

我有一个initializerow事件,其中包含以下简单代码:

    private void grdPeople_InitializeRow(object sender, InitializeRowEventArgs e)
    {
        if (e.Row.Cells["NoSMS"].Value != null)
        {
            if (e.Row.Cells["NoSMS"].Value.ToString() == "True")
            {
                e.Row.Appearance.BackColor = System.Drawing.Color.FromArgb(255, 80, 50, 30);
                e.Row.Appearance.ForeColor = System.Drawing.Color.FromArgb(255, 150, 150, 150);
            }
        }
    }

如果将NoSMS标记设置为true,则上面的代码会使联系人灰显 - 这意味着他们不希望被联系。尊重隐私等等。

现在,当选择该行时,此颜色会被ultrawingrid的“选定”颜色方案覆盖 - 这意味着当用户被选中一大群联系人时,它不能立即看到哪些是'灰了'。

我尝试添加以下代码,但它没有奏效:

                foreach (UltraGridRow row in grdPeople.Selected.Rows)
                {
                    if (e.Row.Index == row.Index)
                    {
                        e.Row.Appearance.BackColor = System.Drawing.Color.FromArgb(255, 80, 50, 30);
                        e.Row.Appearance.ForeColor = System.Drawing.Color.FromArgb(255, 150, 150, 150);
                    }
                }

有谁知道我如何检测当前正在初始化的行当前是否在选择中,或者为什么该代码可能不起作用?

1 个答案:

答案 0 :(得分:3)

首先要做的是在设计师中定义Appearance一次,然后将其添加到Appearances属性的DisplayLayout集合中。
存储在那里的每个Appearance都由一个键值标识(让我们在这个场景中使用“disabled_row”)。

通过这种方式,每行只有一个外观而不是一个外观 同样以这种方式引用单元格值可能会导致大量内存消耗,Infragistics推荐的方法是使用GetCellValue方法(See WinGrid Performance Guide

检索值

然后InitializeRow中的代码可以更改为

private void grdPeople_InitializeRow(object sender, InitializeRowEventArgs e)
{
    UltraGridColumn c = e.Row.Band.Columns["NoSMS"];
    object o = e.Row.GetCellValue(c) ?? false;
    bool noSMS = Convert.ToBoolean(o);

    if (noSMS)
    {
        e.Row.Appearance = grdPeople.DisplayLayout.Appearances["disabled_row"];
        foreach(UltraGridCell c in e.Row.Cells)
            c.SelectedAppearance = grdPeople.DisplayLayout.Appearances["disabled_row"];
    }
}

同时检查Infragistics帮助页面上的Conditional Formatting(但这仅适用于单元格AFAIK的单元格)