我有一个DataGridView,我想在其中将两个不同列的值汇总到第三列。
示例DataGridView:
A B Total
1 2 3
25 35 60
5 -5 0
我想在A & B column
中输入值或离开当前行后,总共添加(A + B)。并且还希望将总列设置为ReadOnly
。
答案 0 :(得分:7)
您可以在CellValidatedEvent上执行此操作,并且可以将相同的方法应用于RowValidated:
private void dataGridView_CellValidated(object sender, DataGridViewCellEventArgs e) {
if (e.RowIndex > -1) {
DataGridViewRow row = dataGridView.Rows[e.RowIndex];
string valueA = row.Cells[columnA.Index].Value.ToString();
string valueB = row.Cells[columnB.Index].Value.ToString();
int result;
if (Int32.TryParse(valueA, out result)
&& Int32.TryParse(valueB, out result)) {
row.Cells[columnTotal.Index].Value = valueA + valueB;
}
}
}
您可以在设计器中将列设置为ReadOnly,或者像这样:
dataGridView.Columns["Total"].ReadOnly = true
答案 1 :(得分:3)
你可以很容易地做到这一点
但是您应该拥有像SQL这样的数据集或本地数据库连接 我会假设你得到它并命名它 Totaldataset。
轻松完成我知道答案太晚了但也许它可以帮助一些新读者。
Datacolumn column = new Datacolumn ();
column.Columnname = "Total";
Totaldataset.Tables[0].Columns.["Total"].Expression = "a+b";
答案 2 :(得分:1)
这是一个有效的例子:
public partial class Form1 : Form
{
DataGridView _calcDataGridView;
public Form1()
{
InitializeComponent();
_calcDataGridView = new DataGridView();
this.Controls.Add(_calcDataGridView);
_calcDataGridView.Dock = DockStyle.Fill;
_calcDataGridView.Name = "CalcDataGridView";
_calcDataGridView.CellEndEdit += Calculate;
var aColumn = new DataGridViewTextBoxColumn();
aColumn.Name = "AColumn";
aColumn.HeaderText = "A";
_calcDataGridView.Columns.Add(aColumn);
var bColumn = new DataGridViewTextBoxColumn();
bColumn.Name = "BColumn";
bColumn.HeaderText = "B";
_calcDataGridView.Columns.Add(bColumn);
var totalColumn = new DataGridViewTextBoxColumn();
totalColumn.Name = "TotalColumn";
totalColumn.HeaderText = "Total";
totalColumn.ReadOnly = true;
_calcDataGridView.Columns.Add(totalColumn);
}
private void Calculate(object sender, DataGridViewCellEventArgs e)
{
object a = _calcDataGridView.CurrentRow.Cells["AColumn"].Value;
object b = _calcDataGridView.CurrentRow.Cells["BColumn"].Value;
double aNumber = 0;
double bNumber = 0;
if (a != null)
aNumber = Double.Parse(a.ToString());
if (b != null)
bNumber = Double.Parse(b.ToString());
_calcDataGridView.CurrentRow.Cells["TotalColumn"].Value = aNumber + bNumber;
}
}
答案 3 :(得分:0)
如果你使用Eval
使用数据绑定
比你可以在那里创建一个方法,并且在该方法上只将这两个值相加。
喜欢
对于A栏
<ItemTemplate>
<%# Eval("A")%>
</ItemTemplate>
列B
<ItemTemplate>
<%# Eval("B")%>
</ItemTemplate>
总计
<ItemTemplate>
<%# GetTotal(Eval("A"),Eval("B")) %>
</ItemTemplate>
总方法
private string GetTotal(object A,object B)
{
return (A+B).ToString();
}
希望这会对你有所帮助。