我的问题是这样的,我有一个datagrid表。里面放了某班学生的成绩如下:学号,姓名,语文,数学
0001 s1 90 89
0002 s2 98 99
0003 s3 78 90
0004 s4 89 67
........
现在想在datagrid表的页脚放上统计值。如下:学号,姓名,语文,数学
0001 s1 90 89
0002 s2 98 99
0003 s3 78 90
0004 s4 89 67
........
单科总分: sum1 sum2
单科平均分:avr1 avr2
单科优秀率:yx1 yx2
单科及格率:jg1 jg2
请高手指点一二???谢谢!
.......
0001 s1 90 89
0002 s2 98 99
0003 s3 78 90
0004 s4 89 67
........
现在想在datagrid表的页脚放上统计值。如下:学号,姓名,语文,数学
0001 s1 90 89
0002 s2 98 99
0003 s3 78 90
0004 s4 89 67
........
单科总分: sum1 sum2
单科平均分:avr1 avr2
单科优秀率:yx1 yx2
单科及格率:jg1 jg2
请高手指点一二???谢谢!
.......
解决方案 »
- 怎么统计上传word的字数?
- 请问有开源的在线视频录制工具吗???FLASH的`
- 送分:怎么在退出网站的时候关闭当前所有打开的网页????
- 跨库查询问题
- 关于onblur事件的问题?
- (100分求助)树形结构TreeView加框架的问题??
- 只有权限用查询分析器,求最佳数据备份方案(困惑多日)
- 好诡异的问题,救急啊!!!!
- CrystalReportViewer的用处是什么?web报表是干什么用的?
- 该死!ASP。NET中的FTP?
- asp.net中的.aspx页面如何注释,<%-- --%>也不行,去注释 <%@Import %>这样的指令就不行了
- 如何实现http://www.ctrip.com/里面日期的选择功能,用calendar 好像不容易实现,有没有类似的代码?
当然服务器端通过对datagrid的数据源比如dataset、datatable ImportRow 统计DataRow 也可以,里面的统计方式要涉及到DataTable的Compute方法,查看相关帮助文档
DataGrid控件的ItemDataBound事件
if(e.Item.ItemIndex>=0)
{
Sum+=int.Parse(e.Item.Cell[3].Text);
}
else if(e.Item.ItemType==ListItemType.Footer)
{
e.Item.Cell[0].Text="总和为:";sum.ToString();
e.Item.Cell[1].Text=sum.ToString();
e.Item.Cell[2].Text="平均值为:";
e.Item.Cell[3].Text=((int)(sum/dgAddSumOnFooter.Item.Count)).ToString();
}这样你看明白了吧!!
int count=0;
for (int i=0;i<ds.Tables[0].Rows.Count;i++)
{
//求总分
count+=int.Parse(ds.Tables[0].Rows[i]["Score"].ToString());
}
//求均分
int nAv=count/ds.Tables[0].Rows.Count;
//轮询,把需要加统计值的都加上。
foreach(DataGridItem dgi in DataGrid1.Controls[0].Controls)
{
if(dgi.ItemType==ListItemType.Footer)
dgi.Cells[6].Text="平均:"+nAv.ToString();
}
详细可以下载收听MSDN WEBCAST《DataGrid最佳实践》(邵志东主讲),有专门介绍。
DataSet CreateDataSource()
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("名称", typeof(string)));
dt.Columns.Add(new DataColumn("Value1", typeof(Int32)));
dt.Columns.Add(new DataColumn("Value2", typeof(Int32)));
dt.Columns.Add(new DataColumn("Value3", typeof(Int32)));
dt.Columns.Add(new DataColumn("Value4", typeof(Int32)));
for (int i = 0; i < 10; i++)
{
dr = dt.NewRow();
dr[0] = i.ToString()+"名称";
dr[1] = i;
dr[2] = i+1;
dr[3] = i+2;
dr[4] = i+3;
dt.Rows.Add(dr);
}
DataSet MyData=new DataSet();
MyData.Tables.Add(dt);
return MyData;
}
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
DataSet MyData=CreateDataSource();
// DataGrid1.DataSource= MyData;
// DataGrid1.DataBind();
DataTable MyTable=new DataTable();
DataColumn myColum;
foreach( DataColumn NowDataColumn in MyData.Tables[0].Columns)
{
myColum=new DataColumn();
myColum.DataType=NowDataColumn.DataType;
myColum.ColumnName=NowDataColumn.ColumnName;
MyTable.Columns.Add(myColum);
}
myColum=new DataColumn();
myColum.DataType=System.Type.GetType("System.Int32");
myColum.ColumnName="每行合计";
MyTable.Columns.Add(myColum);
DataRow AcountRow;
int DataColumns=MyData.Tables[0].Columns.Count;
foreach( DataRow NowRow in MyData.Tables[0].Rows)
{
AcountRow=MyTable.NewRow();
AcountRow.ItemArray=NowRow.ItemArray;
//每行合计
GetRowAccount(AcountRow,1,5,DataColumns);
MyTable.Rows.Add(AcountRow);
}
//生成的合计
AcountRow=MyTable.NewRow();
AcountRow[0]="竖列合计";
for(int count=1;count<MyTable.Columns.Count;count++)
foreach (DataRow NowRow in MyTable.Rows)
{
if(!AcountRow.IsNull(count))
{
if (!AcountRow.IsNull(count) )
AcountRow[count]= Convert.ToInt32(AcountRow[count])+Convert.ToInt32(NowRow[count]);
}
else AcountRow[count]=NowRow[count];;
}
MyTable.Rows.Add(AcountRow);
DataGrid1.DataSource=MyTable;
DataGrid1.DataBind();
}
protected int total;
public void DataGrid1_ItemDataBound(object sender,DataGridItemEventArgs e)
{
if ((e.Item.ItemType == ListItemType.Item)||(e.Item.ItemType == ListItemType.AlternatingItem))
{
total+= Convert.ToInt32(e.Item.Cells[1].Text.ToString());
}
if (e.Item.ItemType == ListItemType.Footer)
{
e.Item.Cells[1].Text = total.ToString();
}
}
{
for (int i = 0; i < 2; i++)
{
e.Item.Cells.RemoveAt(1);
}
e.Item.Cells[0].Text = "总分";
// 单元格对齐方式
e.Item.Cells[0].HorizontalAlign = HorizontalAlign.Right;
// 要合并的单元格
e.Item.Cells[0].ColumnSpan = 3;
e.Item.Cells[1].Text= 计算出的总分;
}
protected void GridView1_DataBound(object sender, EventArgs e)
{
if(dataset.Tables[0].Rows.Count > 0)
((Label)GridView1.HeaderRow.FindControl("sum")).Text = dataset.Tables[0].Compute("sum(timeslice)","true").ToString();
}
dataset.Tables[0].Compute的方法可以采用计算公式进行数据计算,比较通用.