gridview 统计 分组Word文档下载推荐.docx
- 文档编号:19942677
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:20
- 大小:262.36KB
gridview 统计 分组Word文档下载推荐.docx
《gridview 统计 分组Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《gridview 统计 分组Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
ShipRegion"
true,true);
helper.ApplyGroupSort();
其中,RegisterGroup法子的第一个参数定义了分组根据,也就是按哪个列来进行分组.当然也可以创立交叉分组(compositegroup),也就是遵守几个列的组合进行分组.第二个参数指定了是否主动分组,就本例而言,为每个组的标头新创立一行.第三个参数指定是否把作为分组根据的那个列强制潜藏.而ApplyGroupSort法子将分组根据的那个列作为排序标准(sortexpression),就本例而言,自然就是ShipRegion了.这么做是很有必要的,因为有可能数据从数据库检索来时已经进行了某种排序.如下图,ShipRegion列已经被潜藏了:
图3
让我们来看一些更有趣的事情,向各个分组添加统计功效.如下:
SummaryOperation.Sum,"
);
这次,RegisterSummary法子多了一个参数。
该参数指定了创立统计功效的组的名称。
组的名称主动由作为分组根据的那些列的名字生成.如果分组根据只有一个列,那么组的名称就是那一列的名称;
如果分组根据有多个列,那么组名由这些列名按次序串联起来,用加号("
+"
)连接,如"
ShipRegion+ShipName"
.下图为进行了分组且对每组添加统计功效的情况:
图4
我们还可以创立"
等级组"
如下所示:
ShipName"
效果如下:
图5
GridViewHelper有一些事件可以很容易的实现视觉或功效上的调剂,如下:
图6:
GroupStart:
当新的分组起头时产生,意思就是说,当在作为分组根据的列里创造新的值时.
GroupEnd:
某个组的最后一行收场时产生.
GroupHeader:
当主动的为某个组添加一个标头时产生.如果不是主动的分组的话将不会触发该事件.
GroupSummary:
当为某个组生成统计功效时产生。
如果不是主动分组的话将不会触发该事件,不过头组类型是suppressiongroup(我们将在后面介绍)的话,另当别论.
GeneralSummary:
当算出最终累计数时产生.如果最终累计数是主动生成的,那么在添加统计行,且数字填充到行之后才触发该事件.
通过寥寥几行代码我们就可以改良界面,如下:
helper.GroupHeader+=newGroupEvent(helper_GroupHeader);
privatevoidhelper_GroupHeader(stringgroupName,object[]values,GridViewRowrow)
if(groupName=="
)
row.BackColor=Color.LightGray;
row.Cells[0].Text="
&
nbsp;
"
+row.Cells[0].Text;
elseif(groupName=="
)
row.BackColor=Color.FromArgb(236,236,236);
改良后的界面如下:
图7:
更多分组选项
这里还有2个案例。
第一个是交叉分组(compositegroup).第二个案例定义了一个suppressgroup,其行径与sqlGROUPBY字句一样,重复的值都过滤掉,且将summary操作建立在其它列的根基上.
下面我们将看到这些交叉组的代码以及界面:
string[]cols=newstring[2];
cols[0]="
;
cols[1]="
helper.RegisterGroup(cols,true,true);
图8
我们可以向该分组添加统计功效.这次,我们将定义一个求平均数的操作,并添加一个显示该操作的label控件:
SummaryOperation.Avg,"
helper.GroupSummary+=newGroupEvent(helper_GroupSummary);
privatevoidhelper_GroupSummary(stringgroupName,object[]values,GridViewRowrow)
row.Cells[0].HorizontalAlign=HorizontalAlign.Right;
Average"
图9:
最后这个示例将创立一个suppressgroup.有一点很首要,如果定义了一个suppressgroup就不能创立其它的分组.同理,如果已经一个分组,也不能再定义一个suppressgroup,如果你非要硬来的话将抛出一个异常.
下面我们将看到suppressgroup的代码以及界面:
helper.SetSuppressGroup("
Quantity"
图10
那些没有在summary操作里定义的列,其包孕的值没有显示出来.它提示某种信息:
"
Column'
column_name'
isinvalidintheselectlistbecauseitisnotcontainedineitheranaggregatefunctionortheGROUPBYclause."
没有必要将那些无关的列显示出来。
为此,我们调用一个法子将它们潜藏起来:
helper.SetSuppressGroup(rdBtnLstGroup.SelectedValue);
helper.SetInvisibleColumnsWithoutGroupSummary();
图11
Summary操作
GridViewHelper有3个内置的统计操作:
sum,average以及rowcount.我们可以定制自己的统计操作.为此,我们要为GridViewHelper供给2个法子.第一个法子将会被方格(或组)里的每一行所调用,第二个法子将会被调用来返回效果.下面我们将展现一个用户自定义统计操作的示例.其返回最小值:
privateList<
int>
mQuantities=newList<
();
SaveQuantity,GetMinQuantity);
privatevoidSaveQuantity(stringcolumn,stringgroup,objectvalue)
mQuantities.Add(Convert.ToInt32(value));
privateobjectGetMinQuantity(stringcolumn,stringgroup)
int[]qArray=newint[mQuantities.Count];
mQuantities.CopyTo(qArray);
Array.Sort(qArray);
returnqArray[0];
在上面的代码中,2个法子都接管group和column名称.如果统计法子不涉及到group,那么该参数为null.这些法子都被每一行所调用,同时接管当前行的某列的值.最终效果如下:
图12
局限性
在上面的例子我们模仿(simulate)了一个"
。
虽然该方格看起来具有"
层次感"
但履行起来绝不会按层次进行.没有group或subgroup,只有sequentiallyregisteredgroups.不过,如果我们想对一个内镶组添加统计功效时,这倒是个问题.下面,我们将看在这种情况下将会产生什么情况:
helper.GroupSummary+=newGroupEvent(helper_Bug);
privatevoidhelper_Bug(stringgroupName,object[]values,GridViewRowrow)
if(groupName==null)return;
row.BackColor=Color.Bisque;
row.Cells[0].HorizontalAlign=HorizontalAlign.Center;
[Summaryfor"
+groupName+"
"
+values[0]+"
]"
图13
如上图所示,summary在外部组(outergroup)的标头创立后再创立.原因是,原本事件的产生次序是:
Group1_Start
Group1_End
Group2_Start
Group2_End
对hierarchicalgrouping而言,事件产生次序为:
贯彻
GridViewHelper是作为一个独立类(standaloneclass)而不是继承类来贯彻的,这就使的利用GridViewHelper来处理任何的GridView成为了可能。
另外还有4个类:
GridViewSummary,GridViewGroup,GridViewSummaryList以及GridViewGroupList.这些"
list"
classes可以利用一个字符串索引来进行造访,如:
helper.GeneralSummaries["
].Value.
当创立GridViewHelper时,将对目标GridView的一个引用进行保存,且RowDataBound事件将绑定到一个法子完成实际的工作:
publicGridViewHelper(GridViewgrd,booluseFooterForGeneralSummaries,SortDirectiongroupSortDirection)
this.mGrid=grd;
this.useFooter=useFooterForGeneralSummaries;
this.groupSortDir=groupSortDirection;
this.mGeneralSummaries=newGridViewSummaryList();
this.mGroups=newGridViewGroupList();
this.mGrid.RowDataBound+=newGridViewRowEventHandler(RowDataBoundHandler);
GridViewHelper内部应用的一些法子被定义为public,因为如果必要的话可以将这些有用的法子进行用户定制.还有一些其它的操作选择没有在示例里进行演示,不过我们可以通过VisualStudio的智能感知系统来查证.
纪要:
对值类型的过多的的装箱和拆箱操作会对履行性能产生影响.为此,我们可以用泛型来贯彻这些内置的统计操作,但这并没有想象的那么容易,可以参阅文章《UsingGenericsforCalculations》或《OperatorOverloadingwithGenerics》。
在现实生活中,这种影响不太显着,除非有数百万行,或有数千个用户分组,且同时进行数据统计操作.
在线案例将GridView的EnableViewState设置为false.这是必要的,因为当其为true,在一个页面回传时,GridView控件将从ViewState进行重新绑定,而不会触发RowDataBound事件.我们可以在ASP2.0里放心的禁用该ViewState,因为ControlState仍然进行了保存.
GridView增加一个统计行的方法
[日期:
01-20]
来源:
作者:
[字体:
大中小]
CMB项目中要涉及到stock的统计功能,由于是采用了gridview来实现数据的显示,这里就碰到了一个问题,在需求分析里客户要求对所有的股票进行一个统计,如下图:
大家看在最下面的一行,只出现了一个数值,其它列都不存在数值,而这个数的功能主要是对上面这行"
持仓股票市值进行一个总的统计"
,这是如何实现的呢?
首先,我们要把gridview里面的属性中ShowFooter="
True"
,就是把gridview的页脚打开,这只是第一步。
第二步:
在双击属性面板中的事件,让他自动生成一个GridView1_RowDataBound的事件,我们最终就是要在里面写几行简单的代码实现功能了.
第三步:
在protected
void
GridView1_RowDataBound(object
sender,
GridViewRowEventArgs
e)加入代码了,由于我这里是做需求分析时,只要在页面里显示出效果就可以了,所以我的代码比较简单。
但是如果你要加上统计功能的话,你就可以在里面自定义一些相关变量,或调用相关的方法就可以了,我这里只是一个框架了.
protected
e)
{
decimal
totalstock=0;
if
(e.Row.RowType
==
DataControlRowType.DataRow)
//
totalstock
+=
Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem,
stockholdmarketprice"
));
DataBinder.Eval(e.Row.DataItem,
//在这里就可以实现总和的计算了
}
else
if(e.Row.RowType
DataControlRowType.Footer)
e.Row.Cells[3].Text="
持仓总市值"
e.Row.Cells[3].HorizontalAlign
=
HorizontalAlign.Right;
e.Row.Cells[4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- gridview 统计 分组