如何以编程方式更改DataGrid Cell值

时间:2013-12-05 12:33:29

标签: wpf setvalue datagridcell

我有一些带有一些行的DataGrid。现在我想要更改一些单元格样式,例如: |红色| Hel | / red | |蓝色| lo | / blue |所有人。

这是我的GetCell功能。

public 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++)
            {
                var v = (Visual) VisualTreeHelper.GetChild(parent, i);
                child = v as T;
                if (child == null)
                {
                    child = GetVisualChild<T>(v);
                }
                if (child != null)
                {
                    break;
                }
            }
            return child;
        }

        public static DataGridRow GetSelectedRow(this DataGrid grid)
        {
            return (DataGridRow) grid.ItemContainerGenerator.ContainerFromItem(grid.SelectedItem);
        }

        public static DataGridRow GetRow(this DataGrid grid, int index)
        {
            var row = (DataGridRow) grid.ItemContainerGenerator.ContainerFromIndex(index);
            if (row != null) return row;
            // May be virtualized, bring into view and try again.
            grid.UpdateLayout();
            grid.ScrollIntoView(grid.Items[index]);
            row = (DataGridRow) grid.ItemContainerGenerator.ContainerFromIndex(index);
            return row;
        }

        public static DataGridCell GetCell(this DataGrid grid, DataGridRow row, int column)
        {
            if (row == null) return null;
            var presenter = GetVisualChild<DataGridCellsPresenter>(row);

            if (presenter == null)
            {
                grid.ScrollIntoView(row, grid.Columns[column]);
                presenter = GetVisualChild<DataGridCellsPresenter>(row);
            }

            var cell = (DataGridCell) presenter.ItemContainerGenerator.ContainerFromIndex(column);
            if (cell == null)
            {
                grid.ScrollIntoView(row, grid.Columns[column]);
                cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
            }  
            return cell;
        }

        public static DataGridCell GetCell(this DataGrid grid, int row, int column)
        {
            DataGridRow rowContainer = grid.GetRow(row);
            return grid.GetCell(rowContainer, column);
        }

当我通过grid.GetCell(1,0).Content =“PpppPppp”设置DataGridCell内容时,然后滚动DataGrid,值就消失了! 为什么? 即使价值也会跳到另一个单元格。太奇怪了。

我想用样式设置单元格,所以不要使用关于:

的功能
(this.dataGrid1.Items[0] as DataRowView)[0] = "new value";

可是:

private void SetBlockStyle(TextBlock block, Dictionary<int, int> section)
        {
            Brush foreground = Brushes.Red;
            int start = 0;
            string text = block.Text;
            block.Text = "";
            foreach (int i in section.Keys)
            {
                if (text.Length <= i)
                {
                    break;
                }
                block.Inlines.Add(text.Substring(start, i - start));
                start = i;
                block.Inlines.Add(new Run(text.Substring(i, section[i]))
                {
                    Foreground = foreground,
                    FontWeight = FontWeights.Bold
                });
                start += section[i];
            }
            if (start < text.Length)
            {
                block.Inlines.Add(text.Substring(start, text.Length - start));
            }
        }

你能给我一些建议吗?

0 个答案:

没有答案