我用DataGrid的排序,如下学生名称       课程1      课程2    课程3
  XXX           89          76       100  
  YYY           72          93       98 
  ZZZ           97          72       67现在点击课程1已经实现正反排序,如何在三门课程分数前面各加上一个排序号,会根据后面的分数排序变化。如:按照课程1降序排列后结果应该如下:学生名称       课程1      课程2    课程3
  ZZZ          1 97       3 72     3 67
  XXX          2 89       2 76     1 100  
  YYY          3 72       1 93     2 98
就是各列排序号动态根据所选的列排序,CSDN上问好久了没有结果,请大家帮帮忙,具体怎么实现,谢谢

解决方案 »

  1.   

    请问用SQL怎么实现呢,用什么显示呢,谢谢
      

  2.   

    你是怎么排课程1的呢?照样排课程2,3就是了,譬如用ViewState记住需要排序的字段,然后用DataView的Sort属性来排,参考http://www.dotnetbips.com/displayarticle.aspx?id=7
      

  3.   

    同意楼上~最好不动数据库。操作数据源,定义一个Datatable存序号
      

  4.   

    probably, then you can do in SQLselect 学生名称 ,  课程1 , (select count(课程1) from yourtable t2 where t2.课程1 >= t.课程1) as 课程1名次 
    ...
    from yourtable t
    or in code, add three additional columns to your datatableDataTable1.Columns.Add("课程1名次",typeof(int));
    DataTable1.Columns.Add("课程2名次",typeof(int));
    DataTable1.Columns.Add("课程3名次",typeof(int));DataView dv = new DataView(DataTable1);
    dv.Sort = "课程1 DESC";
    for(int i=0; i < dv.Count; i++)
      dv[i]["课程1名次"] = i+1;dv.Sort = "课程2 DESC";
    for(int i=0; i < dv.Count; i++)
      dv[i]["课程2名次"] = i+1;dv.Sort = "课程3 DESC";
    for(int i=0; i < dv.Count; i++)
      dv[i]["课程3名次"] = i+1;
      

  5.   

    OleDbConnection conn=new OleDbConnection(connStr);
    OleDbDataAdapter MyCommand = new OleDbDataAdapter("SELECT 学生姓名,语文,数学,英语 FROM student", conn);
    DataSet ds = new DataSet();
    MyCommand.Fill(ds, "student");
    DataView Source = ds.Tables["student"].DefaultView;
    Source.Table.Columns.Add( "名次1",typeof(int)); 
    Source.Table.Columns.Add( "名次2",typeof(int));
    Source.Table.Columns.Add( "名次3",typeof(int));Source.Sort="语文 DESC"; 
    for(int i=0; i < Source.Count ; i++)
    Source[i]["名次1"] = i+1;
    Source.Sort="数学 DESC"; 
    for(int i=0; i < Source.Count ; i++)
    Source[i]["名次2"] = i+1;
    Source.Sort="英语 DESC"; 
    for(int i=0; i < Source.Count ; i++)
    Source[i]["名次3"] = i+1;
    DataGrid1.DataSource=Source; 
    DataGrid1.DataBind(); 问题解决了多谢思归大哥,但怎么让名次1这列显示在语文前面,名次2列显示在英语前呢,新加这三列都显示在后面,还有就是现在默认是名次3 英语的显示顺序为1,2,3,4,5,如果要改为语文按这个顺序显示呢,我初学者,还请帮忙,谢谢!
      

  6.   

    how did you bind the datagrid? try to set AutoGenerateColumns=false,and use templates<asp:TemplateColumn HeaderText="英语">
     <ItemTemplate>
       <%# DataBinder.Eval(Container.DataItem,"名次3") %> &nbsp;
       <%# DataBinder.Eval(Container.DataItem,"英语") %>
     </ItemTemplate>
    </asp:TemplateColumn>