如何使用数据网格单元格的列和行索引值设置其值

本文关键字:索引值 设置 数据 何使用 数据网 网格 单元格 | 更新日期: 2023-09-27 18:11:06

如何通过使用cell列和行索引将值插入到特定的数据网格单元格中?我将行和列索引保存为整数。

我得到的索引如下。我基本上是取单元格值,列索引和行索引,作为序列化的XML发送给java, java将它发送回来,需要把它放在同一个单元格中。

        int column = dataGrid2.CurrentCell.Column.DisplayIndex;
        int row = dataGrid2.SelectedIndex;

谢谢,

如何使用数据网格单元格的列和行索引值设置其值

如果你使用DataGrid,你可以尝试一下

DataRowView rowView = (dtGrid.Items[rows] as DataRowView); //Get RowView
rowView.BeginEdit();
rowView[col] = "Change cell here";
rowView.EndEdit();
dtGrid.Items.Refresh(); // Refresh table

对于数据网格,您可以通过Items属性访问行。单元格是项的集合。

dataGrid2.Items[row].Cells[column].Text = "text";

只要数据在当前页面生命周期内被绑定到数据网格,该方法就可以工作。如果不是这种情况,那么我相信你是在走控制。

要以编程方式更新WPF DataGridCell,有多种方法…

方法之一是更新绑定数据项本身的值。这样,属性更改通知将触发所有订阅的视觉效果,包括DataGridCell本身…

反射方法

 var boundItem = dataGrid2.CurrentCell.Item;
 //// If the column is datagrid text or checkbox column
 var binding = ((DataGridTextColumn)dataGrid2.CurrentCell.Column).Binding;
 var propertyName = binding.Path.Path;
 var propInfo = boundItem.GetType().GetProperty(propertyName);
 propInfo.SetValue(boundItem, yourValue, new object[] {});

对于DataGridComboBoxColumn,您必须提取SelectedValuePath并使用它来代替propertyName

其他方法包括将单元格置于编辑模式并使用EditingElementStyle中的某些行为更新其内容值…我觉得这很麻烦。

如果你真的需要的话,请告诉我。

我使用了一个基于wpf的变体-它的例子来做整个行,它工作了!:

(sender as DataGrid).RowEditEnding -= DataGrid_RowEditEnding;
foreach (var textColumn in dataGrid2.Columns.OfType<DataGridTextColumn>())
            {
                var binding = textColumn.Binding as Binding;
                if (binding != null)
                {
                    var boundItem = dataGrid2.CurrentCell.Item;
                    var propertyName = binding.Path.Path;
                    var propInfo = boundItem.GetType().GetProperty(propertyName);
                    propInfo.SetValue(boundItem, NEWVALUE, new object[] { });
                }
            }
(sender as DataGrid).RowEditEnding += DataGrid_RowEditEnding;

PS:请确保使用对该列有效的值类型(可能通过switch语句)。

例如:打开propertyName或propInfo…propInfo。SetValue(boundItem, (type) NEWVALUE,新对象[]{});

                    switch (propertyName)
                    {
                        case "ColumnName":
                            propInfo.SetValue(boundItem, ("ColumnName"'s type) NEWVALUE, new object[] { });
                            break;
                        default:
                            break;
                    }