gpt4 book ai didi

c# - 为什么我不能编辑 DevExpress 数据透视表数据?

转载 作者:行者123 更新时间:2023-11-29 13:00:06 25 4
gpt4 key购买 nike

我需要编辑数据透视表中显示的信息,但组件不允许我这样做。我将数据透视表绑定(bind)到 DataTable 对象,该对象使用 Npgsql 从数据库 (PostgreSQL) 中填充。这是填充 DataSource 的行:

PivotGridControl1.DataSource = connection.getDataFromQuery("select * from fact");

getDataFromQuery 方法返回一个包含查询执行结果的 DataTable。然后我定义数据透视表的区域:

PivotGridField rowName = new PivotGridField ("item", FieldArea.RowArea);
PivotGridField columnField = new PivotGridField("name", FieldArea.ColumnArea);
PivotGridField dataField = new PivotGridField("amount", FieldArea.DataArea);

最后将它们添加到控件中:

PivotGridControl1.Fields.AddRange(new[] { rowName, columnField, dataField });

问题是我得到了我想要的数据透视表,但我无法编辑网格内的数据。

enter image description here

我用的是DevExpress 13.2版本,有点旧,可能需要更新,也可能需要在组件里配置一些东西。有什么想法吗?

最佳答案

默认情况下,无法编辑 PivotGridControl 中的数据,但您可以通过更改 PivotGridField.CellTemplate 来指定单元格的编辑器属性(property)或PivotGridControl.FieldCellTemplate属性(property)。
例如:

<dxpg:PivotGridControl.FieldCellTemplate>
<DataTemplate>
<dxe:PopupCalcEdit
EditValue="{Binding Value, Mode=OneWay}"
...
/>
</DataTemplate>
</dxpg:PivotGridControl.FieldCellTemplate>

但您必须考虑,在您的编辑器中编辑的值将如何反射(reflect)在您的基础数据源中,因为 PivotGridControl 中的值是聚合,而不是数据本身。
这是示例:

<dxpg:PivotGridControl.FieldCellTemplate>
<DataTemplate>
<dxe:PopupCalcEdit
EditMode="InplaceInactive"
EditValue="{Binding Value, Mode=OneWay}"
MouseDown="PopupCalcEdit_MouseDown"
LostFocus="PopupCalcEdit_LostFocus"
/>
</DataTemplate>
</dxpg:PivotGridControl.FieldCellTemplate>

private void PopupCalcEdit_MouseDown(object sender, MouseButtonEventArgs e)
{
var calcEdit = sender as PopupCalcEdit;

if (calcEdit == null)
return;

calcEdit.EditMode = EditMode.InplaceActive;
}

private void PopupCalcEdit_LostFocus(object sender, RoutedEventArgs e)
{
var calcEdit = sender as PopupCalcEdit;

if (calcEdit == null && calcEdit.EditMode != EditMode.InplaceActive)
return;

var cellsArea = calcEdit.DataContext as CellsAreaItem;

if (cellsArea == null)
return;

var dataTable = (DataTable)PivotGridControl.DataSource;

var drillSource = PivotGridControl.CreateDrillDownDataSource(cellsArea.ColumnIndex, cellsArea.RowIndex);

if (drillSource.RowCount > 0)
{
int id = (int)drillSource.GetValue(0, "ID"); //Change only the first row in drilled rows.

dataTable.Rows.Find(id)["amount"] = calcEdit.EditValue;
}
else
{
var cellInfo = PivotGridControl.GetCellInfo(cellsArea.ColumnIndex, cellsArea.RowIndex);

object itemValue = cellInfo.GetFieldValue(PivotGridControl.Fields["item"]);
object nameValue = cellInfo.GetFieldValue(PivotGridControl.Fields["name"]);

var row = dataTable.NewRow();
row["item"] = itemValue;
row["name"] = nameValue;
row["amount"] = calcEdit.EditValue;

dataTable.Rows.Add(row);
}

calcEdit.EditMode = EditMode.InplaceInactive;

PivotGridControl.ReloadData();
}

另外,看看 this DevExpress 支持中心线程。

关于c# - 为什么我不能编辑 DevExpress 数据透视表数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32828182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com