如何使用DataGridCell对象获取行索引

时间:2015-06-06 06:15:30

标签: wpf wpfdatagrid

我正在尝试检索当前DataGridCell对象的行索引。如果它是一个对角线单元,我需要它来改变单元格的背景颜色。

我尝试了两个选项,如下所示,两个选项都给了我行索引。但是当我尝试移动滚动条(当网格很大时)并返回到datagrid的顶部时,这两个选项的行索引每次为相同的行提供不同的行索引。基本上,每当我向下滚动时,我都会得到不同颜色的网格。

class CellFormatConverter : IValueConverter
{
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            DataGridCell dgc = (DataGridCell)value;
            DataRowView rowView = (DataRowView)dgc.DataContext;

            //Option 1
            DependencyObject row = value as DependencyObject;

            while (row != null && !(row is DataGridRow))
            {
                row = VisualTreeHelper.GetParent(row);
            }
            int rowIndex = 0;
            if(row!=null)
            {
                DataGridRow gridrow = (DataGridRow)row;
                rowIndex = gridrow.GetIndex();
            }

            //option 2
            //int rowIndex = rowView.Row.Table.Rows.IndexOf(rowView.Row);

            if (dgc.Column.DisplayIndex == rowIndex)
            { 
            return Brushes.Red;
            } 
       return Brushes.White;
      }
 }

更新: 在努力解决问题后,我认为列的displayIndex不断变化导致了这个问题。 后来,我删除了基于displayIndex的实现,现在我使用内容值来决定背景颜色。现在,我的问题是每次我向下滚动并向上滚动网格看起来都不同颜色!!

1 个答案:

答案 0 :(得分:-1)

Dim iCol = maingrid.CurrentCell.ColumnIndex
Dim iRow = maingrid.CurrentCell.RowIndex

iRow可以获得Currentcell Row index.use it !!

如果您想更改当前单元格...请使用以下

maingrid.CurrentCell = maingrid(icol,iRow)