gpt4 book ai didi

c# - 将公式单元格应用于 DataGridview

转载 作者:可可西里 更新时间:2023-11-01 08:09:35 26 4
gpt4 key购买 nike

我想在 DataGridView 中添加公式单元格。是否有任何自定义 DataGridView 可以执行此操作?

示例:

grid[4, column].Text = string.Format("=MAX({0}6:{0}{1})", columnAsString, grid.RowCount);

最佳答案

在很多很多情况下,数据实际上并不在 DataGridView 中, 但在别处像 DataTable或某种集合(如 List<T> )。该控件只是向用户呈现数据 View 。

有多种方法可以按照您的意愿进行操作。对于这两者,数据实际上驻留在 DataTable 中。 .

表达式

A DataColumn可以分配一个 Expression .请查阅链接以了解支持的表达式类型、关键字、运算符和函数。以下将创建一个基于表达式的列到多个 Quantity * Price对于某些行:

dtSample = new DataTable();
dtSample.Columns.Add(new DataColumn("Item", typeof(string)));
dtSample.Columns.Add(new DataColumn("Quantity", typeof(int)));
dtSample.Columns.Add(new DataColumn("Price", typeof(decimal)));
dtSample.Columns.Add(new DataColumn("Sale", typeof(decimal)));

// assign expression using the col names
dtSample.Columns[3].Expression = "(Quantity * Price)";

在添加了一些随机数据以及一个空行之后,DataTable将为您维护这些列。这就像您可能希望的那样工作:如果用户(或代码)更改了 Quantity 的值或 Price细胞,Sale列内容会自动更新。 (图像在第二种方法之后)。

Expressions在行级别工作。对于诸如 TOTALS 行之类的东西,没有全行/按表计算的计数器部分 - 这是因为数据通常来自 DataSource。 .添加计算行可能会意外地将新数据添加到该源(如数据库)。但是在代码中并不难做到:

事件驱动计算

类似于 DGV CellFormatting给出答案,您可以响应来自 DataTable 的事件例如RowChanged .您可以在那里执行任何操作并更新表格。

...create table and columns
...populate table
// hook up event
dtSample.RowChanged += RowChanged;

然后在事件中,代码计算所有单位平均值以显示在最后一行。在某些情况下,您可以使用 Compute() DataTable 的方法.不像 Expression , 它不会自动更新并且 as shown in this answer更新起来可能很笨拙。

有了 DataTable 中的类型化数据,就可以很容易地执行计算以响应事件:

private void RowChanged(object sender, DataRowChangeEventArgs e)
{
// number of rows used
int Rows = dtSample.Rows.Count-1;
if (e.Row == dtSample.Rows[Rows]) return;

// display TotalSales / TotalUnits
// get the units
int TotUnits = dtSample
.AsEnumerable()
.Where(r => !r.IsNull("Quantity"))
.Take(Rows)
.Sum(n => n.Field<int>("Quantity"));

// sum Sales, divide and display in DGV
dtSample.Rows[Rows]["Price"] = dtSample
.AsEnumerable()
.Where(r => !r.IsNull("Sale"))
.Take(Rows)
.Sum(n => n.Field<decimal>("Sale")) / TotUnits;
}

enter image description here

“销售额”列通过 Expression 自动维护这意味着您不能手动对该列执行任何操作。

底部的整体平均价格也是“自动”更新的,不同之处在于我们必须编写少量代码才能做到这一点。

关于c# - 将公式单元格应用于 DataGridview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38852389/

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