0

我有一个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,则上面的代码会将联系人显示为灰色——这意味着他们不希望被联系。尊重隐私等

Now, when that row is selected, this colour is overriden by the 'selected' colour scheme of the ultrawingrid- meaning that when the user is selected a large group of contacts, it is not immediately visible which ones are 'greyed-out'.

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

                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);
                    }
                }

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

4

1 回答 1

3

要做的第一件事是Appearance通过设计器定义just一次并将其添加到属性Appearances集合中DisplayLayout
每个Appearance存储在那里的都由一个键值标识(让我们在这种情况下使用“disabled_row”)。

这样,您只有一个外观,而不是每行一个外观。
同样以这种方式引用单元格值可能会导致大量内存消耗,Infragistics 推荐的方法是使用该GetCellValue方法检索值(请参阅 WinGrid 性能指南

然后您的代码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 帮助页面上的条件格式(但这仅适用于逐个单元格 AFAIK)

于 2013-03-28T12:08:55.197 回答