Winforms Gridview计算

时间:2018-02-12 15:23:45

标签: c# winforms devexpress

我有2列,所以当第一列单元格值包含“ok”时,将在第二列上进行计算。如果它不包含“ok”,那么我不需要任何计算。

代码有效,但不依赖于“ok”,如果单元格包含“ok”或其他任何内容都无关紧要。

{{1}}

2 个答案:

答案 0 :(得分:1)

设置 UnboundExpression 属性会影响整个未绑定列。如果只需要为特定行计算值,则必须将UnboundExpression属性保留为空并处理GridView.CustomUnboundColumnData事件。为每一行引发此事件,允许您计算所需行的值。

答案 1 :(得分:1)

您应该构建correct unbound expression

gridColumn3.UnboundExpression = "Iif([Status]=1, DateDiffDay([StartDate], LocalDateTimeToday()), 0)";

或按如下方式处理GridView.CustomUnboundColumnData事件:

gridColumn3.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;
gridView1.CustomUnboundColumnData += gridView1_CustomUnboundColumnData;
// ...
void gridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e) {
    ColumnView view = ((ColumnView)sender);
    if(e.IsGetData && e.Column == gridColumn3) 
        e.Value = DateTime.Now.Day - ((EventObj)e.Row).StartDate.Day;
}
// ...
public enum Status { 
    Unknown, Ok 
}
public class EventObj {
    public Status Status { get; set; }
    public DateTime StartDate { get; set; }
}