[Asp.Net+C#]Datagrid使用技巧二(怎样让对动态创建的列进行排序)

先发上来,以后再整理,这是我在最近工作中解决的问题。
如果那为朋友有更好的方法,请发给我一下,小弟感谢。
一、动态创建列函数

  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();
   }
  }

原文地址:https://www.cnblogs.com/JimZhang/p/226563.html