之前遇到过这样的需求,数据发生修改后需要将修改的数据提交至数据库,所以需要获取哪些行数据发生过修改,于是有了如题所示的解决方案:
首先,定义GridControl的ValidateRow事件,这样的话在单元格发生修改后,该事件就会执行.代码如下:
private void gridView6_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
{
//判断该行数据是发否发生修改
bool flag = gridView6.FocusedRowModified;
//数据发生修改后的操作
if (flag)
{
//设置该行被选中
gridView6.SelectRow(gridView6.FocusedRowHandle);
//以下是个人的逻辑操作
ColumnView columnView = (ColumnView)sender;
//计算费用总额
//未支付
decimal DormCost_ = Convert.ToDecimal(this.gridView6.GetRowCellValue(gridView6.FocusedRowHandle, columnView.Columns["UnPay"]));
//本次支付
decimal average_ = Convert.ToDecimal(this.gridView6.GetRowCellValue(gridView6.FocusedRowHandle, columnView.Columns["ThisPay"]));
if (average_ > DormCost_)
{
e.Valid = false;
errorReason = 1;
}
else
{
gridView6.OptionsView.ShowFooter = true;//启用显示页脚
willPay = 0;//清零数据
foreach (var item in gridView6.GetSelectedRows())
{
IncoiceInfoSum incoice = (IncoiceInfoSum)gridView6.GetRow(item);
willPay += incoice.ThisPay;
}
//索引为1的列
gridView6.Columns[6].SummaryItem.DisplayFormat = "付款汇总:"+ willPay.ToString("0.##") + "";
gridView6.CustomDrawFooterCell += new FooterCellCustomDrawEventHandler(this.gridView6_CustomDrawFooterCell);//单元格居中显示
}
//刷新
gridView6.RefreshRow(gridView6.FocusedRowHandle);
}
}