首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

PivotGridControl数据汇总有关问题

2012-12-16 
PivotGridControl数据汇总问题.希望实现Cell和GrandTotal中的B/A的值等于B/A*100%用绑定列,目前没有实现该

PivotGridControl数据汇总问题
.

希望实现Cell和GrandTotal中的B/A的值等于B/A*100%
用绑定列,目前没有实现该功能,请高手指教 

[解决办法]
B/A*100% 不还是一样的值吗?  你是不是想把值转换成20%的形式? 还是转换成0.2的形式?
[解决办法]
我建议你最好还是在数据源上做处理,计算好了在绑定到B/A列上。
[解决办法]
结果是百分数,我是在数据源做的出来

ROUND(CAST(FOT AS FLOAT)/CAST(FP AS FLOAT),2) as Rate

这问题出来了,数据汇总时(Cell和GrandTotal)将所有列相加了,将SummaryType改为Average
将解决做平均处理也不满足要求

需要的结果是B/A列都是=B/A的结果(B1+B2+B3)/(A1+A2+A3),不是要自动将每列的结果做平均(B1/A1+B2/A2+B3/A3)/3

[解决办法]
引用:
需要的结果是B/A列都是=B/A的结果(B1+B2+B3)/(A1+A2……


如果是自带几种汇总不能满足你要求的话,你可以在GridView事件中自定义某列的计算方法

        private void GridView_CustomSummaryCalculate(object sender, CustomSummaryEventArgs e)
        {
           if((e.Item as GridColumnSummaryItem).FieldName == "B/A") 
               e.TotalValue = "具体的求值方法:(B1+B2+B3)/(A1+A2+A3)";

        }







[解决办法]
@zhlin118
我这是用的
pivotGridControl控件,没有CustomSummaryCalculate事件
[解决办法]
哦,我的控件版本可能太老了,所以没有找到你这个控件,你用的几点几的版本?
[解决办法]
10.2.3
[解决办法]
private void pivotGridControl1_CustomCellValue(object sender, DevExpress.XtraPivotGrid.PivotCellValueEventArgs e)
        {
            if (e.DataField.FieldName.Equals("MLL"))
            {
                try
                {
                    decimal CB = (decimal)((DevExpress.XtraPivotGrid.PivotGridControl)sender).Cells.GetCellInfo(e.ColumnIndex - 2, e.RowIndex).Value;
                    decimal MLE = (decimal)((DevExpress.XtraPivotGrid.PivotGridControl)sender).Cells.GetCellInfo(e.ColumnIndex - 1, e.RowIndex).Value;
                    if ((CB + MLE) != 0)
                    {
                        e.Value = MLE / (CB + MLE);
                    }


                }
                catch (Exception)
                {
                }
                
            }
            
        }
[解决办法]
朕的最新算法,通用性能大大提高:

private void pivotGridControl1_CustomCellValue(object sender, DevExpress.XtraPivotGrid.PivotCellValueEventArgs e)
        {
            if (e.DataField.FieldName.Equals("MLL"))
            {
                Dictionary <String, String> fields = new Dictionary <string, string> (); 
                try
                {
                    for (int i = 0; i < e.GetColumnFields().Length; i++)
        {
                        fields.Add(e.GetColumnFields()[i].FieldName, e.GetFieldValue(e.GetColumnFields()[i]).ToString());
        }
                    for (int i = 0; i < e.GetRowFields().Length; i++)
                    {
                        fields.Add(e.GetRowFields()[i].FieldName, e.GetFieldValue(e.GetRowFields()[i]).ToString());
                    }
                    DataTable dt = pivotGridControl1.DataSource as DataTable;
                    string filter = string.Empty;
                    foreach (string key in fields.Keys)
                    {
                        filter += string.Format(" and {0}='{1}'", key, fields[key]);
                    }


                    if (filter.Length>=5)
                    {
                        filter = filter.Substring(5, filter.Length - 5);
                    }
                    decimal CB = (decimal)dt.Compute("SUM(CB)", filter);
                    decimal MLE = (decimal)dt.Compute("SUM(MLE)", filter);
                    //decimal CB = (decimal)((DevExpress.XtraPivotGrid.PivotGridControl)sender).Cells.GetCellInfo(e.ColumnIndex - 2, e.RowIndex).Value;
                    //decimal MLE = (decimal)((DevExpress.XtraPivotGrid.PivotGridControl)sender).Cells.GetCellInfo(e.ColumnIndex - 1, e.RowIndex).Value;
                    if ((CB + MLE) != 0)
                    {
                        e.Value = MLE / (CB + MLE);
                    }
                }
                catch (Exception)
                {
                }
                
            }
            
        }
[解决办法]
你好,xqgliet
这个问题解决了没有,我也有同样的问题啊。我的是asp.net

热点排行