通过读取后数据库,得到的DataSet 如下作者 持股建议 数量统计
111 回避 3
111 减持 2
222 回避 4
222 增持 3
333 减持 1
333 回避 2其中持股建议的类型是随时变动的;希望最后绑定的DataGrid 上后变成作者 增持 减持 回避 合计
111 0 2 3 5
222 3 0 4 7
333 0 1 2 3
总计 3 3 9 15非常需要大家的帮助谢谢!!!!
111 回避 3
111 减持 2
222 回避 4
222 增持 3
333 减持 1
333 回避 2其中持股建议的类型是随时变动的;希望最后绑定的DataGrid 上后变成作者 增持 减持 回避 合计
111 0 2 3 5
222 3 0 4 7
333 0 1 2 3
总计 3 3 9 15非常需要大家的帮助谢谢!!!!
CASE 持股建议 WHEN '回避' THEN
Left join( select 作者,数量统计 amount1 from table1 where 持股建议='增持') t1 on table1.作者=t1.作者
Left join( select 作者,数量统计 amount2 from table1 where 持股建议='减持') t2 on table1.作者=t2.作者
Left join( select 作者,数量统计 amount3 from table1 where 持股建议='回避') t3 on table1.作者=t3.作者
1)通过“select 持股建议,sum(数量统计) from Table1 group by 持股建议 ”统计合计
在刚才得到的DataTable1中手动添加一行
DataRow dr = DataTable1.NewRow();
dr[0] = "合计";
dr[1] = ....
...
DataTable1.Rows.Add(dr);
然后绑定DataGrid得到:
作者 增持 减持 回避 合计
111 2 3 5
222 3 4 7
333 1 2 3
总计 3 3 9 152)最后在DataGrid的ItemDataBound事件处理一下空格,
当然,如果你已经使用了CASE ... WHEN .. 语句进行SQL查询处理null的话就不需要下面这步了
if(e.Item.ItemIndex>0)
{
if(e.Item.Cells[1].Text == " ") e.Item.Cells[1].Text =0;
.........
}
111 回避 3
111 减持 2
222 回避 4
222 增持 3
333 减持 1
333 回避 2
------------------------------------------那就需要动态生成列了:
1)首先从数据库中读出3个DataTable,
dt1 : select 作者,sum(数量统计) totalPerple from table1 group by 作者
dt2 : select 作者,持股建议,sum(数量统计) amount from table1 group by 作者,持股建议
dt3 : select 持股建议,sum(数量统计) totalSum from table1 group by 持股建议
把这3个DataTable保存在ViewState里,其中dt1用来绑定DataGrid;2)动态添加绑定列:
在Page_Load里加入以下代码
for(int i=0;i<dt3.Rows.Count;i++)
{
BoundColumn tmpColumn = new BoundColumn();
tmpColumn.HeaderText = dt3.Rows[i]["持股建议"].ToString();
this.dg.Columns.AddAt(1+i,tmpColumn);
}3)在DataGrid的ItemDataBound事件里
if(e.Item.ItemIndex>0)
{
string perpoName = e.Item.Cells[0].Text;
for(int i=0;i<dt3.Rows.Count;i++)
{
string typeName = dt3[i]["持股建议"].ToString();
DataRow[] tmpRows = dt2.Select("作者='"+peopleName+"' and 持股建议='"+typeName+"'");
if(tmpRows.Length>0)
e.Item.Cells[1+i].Text = tmpRows[0][1].ToString()
else
e.Item.Cells[1+i].Text = "0";
}
}