none
wpf datagrid LoadingRow事件的疑问: RRS feed

  • 问题

  • void DGList_LoadingRow(object sender, DataGridRowEventArgs e)
            {
                var row = e.Row.Item as Model.BusStuBal;
                if (row.FValidDate.HasValue)
                {
                    var c = (row.FValidDate.Value - DateTime.Now).Days;
                    if ( c < 0)
                        e.Row.Background = new SolidColorBrush(Color.FromRgb(172, 168, 153));
                    else if ( c >= 0 && c < 30)
                        e.Row.Background = new SolidColorBrush(Color.FromRgb(245, 241, 144));
                }            
            }

    上面是datagrid LoadingRow事件。但是很奇怪,如果我的datagrid数据量少,没有滚动条的时候,他显示正常。但是当数据量多的时候。他就显示背景颜色出问题了。
    举个例子。当我第一次加载完所有的datagrid数据后,屏幕第一次显示的数据的背景颜色没有问题。由于数据量多,datagrid显示了滚动条,然后我继续往下拉,显示就开始出问题了。
    最后我再往上拉,问题就更奇怪了,明明刚才第一次看到这行是没有背景颜色的。但是往回拉时,结果他就有背景颜色了。

    其实这个类似问题我之前也曾遇到过。比如我想让datagrid的最后一行弄成是合计行,因为合计行。所以我想用特别的颜色标注一下。
    我当时在网上找了一个获取datagrid某行的代码如下:

     public static DataGridRow GetRow(this DataGrid dataGrid, int index)
            {
                DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(index);
                if (row == null)
                {
                    // may be virtualized, bring into view and try again  
                    dataGrid.UpdateLayout();
                    dataGrid.ScrollIntoView(dataGrid.Items[index]);
                    row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(index);
                }
                return row;
            }
    如果当datagrid没有滚动条的时候,他显示都是正确的,但是当数据量多并出现滚动条的时候,只要我一拉滚动条,他显示就会很乱!


    ^_^

    2014年8月13日 9:36

答案

全部回复