none
Cambiar de Color a una Celda de una Fila especifica de DataGrid RRS feed

  • Pregunta

  • Estimados
    Necesito evaluar celdas especificas y segun su valor cambiar de color del fondo (rojo y verde)

    He utilizado esta implementacion, pero a la hora de castear y aislar la celda me produce null en el Metodo GetCell. Agradeceria mucho su aporte. 

            public void CambiaColor()
            {
                DataGridCell cell = GetCell(11, 1, dgLectura);
                cell.Background = new SolidColorBrush(Colors.Red);
            }

            public DataGridCell GetCell(int rowIndex, int columnIndex, DataGrid dg)
            {
                //DataGridRow row = dg.ItemContainerGenerator.ContainerFromIndex(rowIndex) as DataGridRow;

                DataGridRow row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromIndex(rowIndex);
                if (row == null)
                {
                    dg.UpdateLayout();
                    dg.ScrollIntoView(dg.Items[rowIndex]);
                    row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromIndex(rowIndex);
                }
                DataGridCellsPresenter p = GetVisualChild<DataGridCellsPresenter>(row);
                DataGridCell cell = p.ItemContainerGenerator.ContainerFromIndex(columnIndex) as DataGridCell;
                return cell;
            }
            static T GetVisualChild<T>(Visual parent) where T : Visual
            {
                T child = default(T);
                int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
                for (int i = 0; i < numVisuals; i++)
                {
                    Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
                    child = v as T;
                    if (child == null)
                    {
                        child = GetVisualChild<T>(v);
                    }
                    if (child != null)
                    {
                        break;
                    }
                }
                return child;
            }

    miércoles, 5 de octubre de 2016 14:09