先发上来,以后再整理,这是我在最近工作中解决的问题。
如果那为朋友有更好的方法,请发给我一下,小弟感谢。
一、动态创建列函数
private void DatagridDataBaind(){
int i;
string strTempValue;
DataTable dtcom = (DataTable)Session["Source"];
DataTable dtsub=(DataTable)Session["subSource"];
Datagrid1.AllowSorting=true;
strTempValue=Convert.ToString(Session["strTempValue"]).Trim();
for(i=0;i<dtsub.Rows.Count;i++)
{
if(dtsub.Rows[i][1].ToString().Trim().Equals("Y"))
{
BoundColumn dgcA=new BoundColumn();
dgcA.HeaderText="A卷,"+dtsub.Rows[i][0].ToString();
dgcA.ItemStyle.HorizontalAlign=HorizontalAlign.Center;
dgcA.DataField="S"+Convert.ToString(i+1)+"A";
dgcA.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
dgcA.HeaderStyle.Width=Unit.Pixel(60);
Datagrid1.Columns.Add(dgcA);
BoundColumn dgcB=new BoundColumn();
dgcB.HeaderText="B卷";
dgcB.ItemStyle.HorizontalAlign=HorizontalAlign.Center;
dgcB.DataField="S"+Convert.ToString(i+1)+"B";
dgcB.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
dgcB.HeaderStyle.Width=Unit.Pixel(60);
Datagrid1.Columns.Add(dgcB);
BoundColumn dgc=new BoundColumn();
dgc.HeaderText="综合";
dgc.ItemStyle.HorizontalAlign=HorizontalAlign.Center;
dgc.DataField="S"+Convert.ToString(i+1);
dgc.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
dgc.HeaderStyle.Width=Unit.Pixel(60);;
Datagrid1.Columns.Add(dgc);
}
else
{
BoundColumn dgc=new BoundColumn();
dgc.HeaderText=dtsub.Rows[i][0].ToString();
dgc.ItemStyle.HorizontalAlign=HorizontalAlign.Center;
dgc.DataField="S"+Convert.ToString(i+1);
dgc.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
dgc.HeaderStyle.Width=Unit.Pixel(60);
Datagrid1.Columns.Add(dgc);
}
}
BoundColumn dgc2=new BoundColumn();
dgc2.HeaderText="总分";
dgc2.ItemStyle.HorizontalAlign=HorizontalAlign.Center;
dgc2.DataField="FullScore";
dgc2.SortExpression="FullScore desc";
dgc2.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
dgc2.HeaderStyle.Width=Unit.Pixel(60);
Datagrid1.Columns.Add(dgc2);
BoundColumn dgc1=new BoundColumn();
dgc1.HeaderText="班级排名";
dgc1.ItemStyle.HorizontalAlign=HorizontalAlign.Center;
dgc1.DataField="orders";
dgc1.SortExpression="orders";
dgc1.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
dgc1.HeaderStyle.Width=Unit.Pixel(60);
Datagrid1.Columns.Add(dgc1);
if(strTempValue.Trim().Equals(""))
{
BoundColumn dgcGrade=new BoundColumn();
dgcGrade.HeaderText="年级排名";
dgcGrade.ItemStyle.HorizontalAlign=HorizontalAlign.Center;
dgcGrade.DataField="gradeorders";
dgcGrade.SortExpression="gradeorders";
dgcGrade.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
dgcGrade.HeaderStyle.Width=Unit.Pixel(60);
Datagrid1.Columns.Add(dgcGrade);
}
}
二、数据绑定函数
private void DatagridDataBaind1(){
DataTable dtcom = (DataTable)Session["Source"];
Datagrid1.DataSource=dtcom.DefaultView;
Datagrid1.DataBind();
}
三、要调用的事件
this.Datagrid1.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.Datagrid1_ItemCreated);
this.Datagrid1.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.Datagrid1_SortCommand);
this.Load += new System.EventHandler(this.Page_Load);
this.Init += new System.EventHandler(this.ScoreOrderWebExe_Init);
四、 排序
private void Datagrid1_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
DataTable dtcom = (DataTable)Session["Source"];
dtcom.DefaultView.Sort = e.SortExpression;
Session["Source"]=dtcom;
DatagridDataBaind1();
}
五、装载动态生成的列
private void ScoreOrderWebExe_Init(object sender, System.EventArgs e)
{
if(IsPostBack){
DatagridDataBaind();
}
}