datatable 结构 如下
  姓名 语文 数学 英语
  张三 60   70  88
  李四 70   60  67
  王五 90   90  77
  赵六 99   90  89想要的datatable结果为:
  姓名 语文 数学 英语 语文名次 数学名次  英语名次
  张三 60   70  88    4        2         2
  李四 70   60  67    3        3         4
  王五 90   90  77    2        1         3
  赵六 99   90  89    1        1         1

解决方案 »

  1.   

    给你一个思路:
    将原始的DataTable数据进行循环,每次循环的时候对各个成绩进行排序,写个排序算法,算出分数在排序中的索引就可以了,记的是升序排序啊
      

  2.   

    用的dataview和select处理了一下数据
            'datatable 结构 如下
            '  姓名 语文 数学 英语
            '  张三 60 70 88
            '  李四 70 60 67
            '  王五 90 90 77
            '  赵六 80 90 89
            Dim dt As New DataTable        dt.Columns.Add("姓名")        dt.Columns.Add("语文", GetType(System.Int32))
            dt.Columns.Add("数学", GetType(System.Int32))
            dt.Columns.Add("英语", GetType(System.Int32))
            dt.Columns.Add("语文名次", GetType(System.Int32))
            dt.Columns.Add("数学名次", GetType(System.Int32))
            dt.Columns.Add("英语名次", GetType(System.Int32))
     
            Dim row As DataRow
     
            row = dt.NewRow
            row("姓名") = "张三"
            row("语文") = "60"
            row("数学") = "70"
            row("英语") = "88"
            dt.Rows.Add(row)        row = dt.NewRow
            row("姓名") = "李四"
            row("语文") = "70"
            row("数学") = "60"
            row("英语") = "67"
            dt.Rows.Add(row)
     
            row = dt.NewRow
            row("姓名") = "王五"
            row("语文") = "90"
            row("数学") = "90"
            row("英语") = "77"
            dt.Rows.Add(row)
     
            row = dt.NewRow
            row("姓名") = "赵六"
            row("语文") = "80"
            row("数学") = "90"
            row("英语") = "89"
            dt.Rows.Add(row)
     
            Dim temp As DataTable        Dim dv As DataView        dv = dt.DefaultView
            dv.Sort = "语文 asc"        temp = dv.ToTable
            For i As Integer = 0 To dt.Rows.Count - 1
                Dim a = temp.Select("姓名='" + dt.Rows(i)("姓名") + "'")
                Dim index = temp.Rows.IndexOf(a(0))
                dt.Rows(i)("语文名次") = index + 1
            Next        dv = dt.DefaultView
            dv.Sort = "数学 asc"        temp = dv.ToTable
            For i As Integer = 0 To dt.Rows.Count - 1
                Dim a = temp.Select("姓名='" + dt.Rows(i)("姓名") + "'")
                Dim index = temp.Rows.IndexOf(a(0))
                dt.Rows(i)("数学名次") = index + 1
            Next
            dv = dt.DefaultView
            dv.Sort = "英语 asc"        temp = dv.ToTable
            For i As Integer = 0 To dt.Rows.Count - 1
                Dim a = temp.Select("姓名='" + dt.Rows(i)("姓名") + "'")
                Dim index = temp.Rows.IndexOf(a(0))
                dt.Rows(i)("英语名次") = index + 1
            Next
            dv.Sort = ""        Me.DataGridView1.DataSource = dt
      

  3.   

    呵呵,忘了这是c#版//datatable 结构 如下
    //  姓名 语文 数学 英语
    //  张三 60 70 88
    //  李四 70 60 67
    //  王五 90 90 77
    //  赵六 80 90 89{
    DataTable dt = new DataTable(); dt.Columns.Add("姓名"); dt.Columns.Add("语文", typeof(System.Int32));
    dt.Columns.Add("数学", typeof(System.Int32));
    dt.Columns.Add("英语", typeof(System.Int32));
    dt.Columns.Add("语文名次", typeof(System.Int32));
    dt.Columns.Add("数学名次", typeof(System.Int32));
    dt.Columns.Add("英语名次", typeof(System.Int32)); DataRow row = null; row = dt.NewRow();
    row["姓名"] = "张三";
    row["语文"] = "60";
    row["数学"] = "70";
    row["英语"] = "88";
    dt.Rows.Add(row); row = dt.NewRow();
    row["姓名"] = "李四";
    row["语文"] = "70";
    row["数学"] = "60";
    row["英语"] = "67";
    dt.Rows.Add(row); row = dt.NewRow();
    row["姓名"] = "王五";
    row["语文"] = "90";
    row["数学"] = "90";
    row["英语"] = "77";
    dt.Rows.Add(row); row = dt.NewRow();
    row["姓名"] = "赵六";
    row["语文"] = "80";
    row["数学"] = "90";
    row["英语"] = "89";
    dt.Rows.Add(row); DataTable temp = null; DataView dv = null; dv = dt.DefaultView;
    dv.Sort = "语文 asc"; temp = dv.ToTable();
    for (int i = 0; i <= dt.Rows.Count - 1; i++) {
    dynamic a = temp.Select("姓名='" + dt.Rows[i]["姓名"] + "'");
    dynamic index = temp.Rows.IndexOf(a(0));
    dt.Rows[i]["语文名次"] = index + 1;
    } dv = dt.DefaultView;
    dv.Sort = "数学 asc"; temp = dv.ToTable();
    for (int i = 0; i <= dt.Rows.Count - 1; i++) {
    dynamic a = temp.Select("姓名='" + dt.Rows[i]["姓名"] + "'");
    dynamic index = temp.Rows.IndexOf(a(0));
    dt.Rows[i]["数学名次"] = index + 1;
    }
    dv = dt.DefaultView;
    dv.Sort = "英语 asc"; temp = dv.ToTable();
    for (int i = 0; i <= dt.Rows.Count - 1; i++) {
    dynamic a = temp.Select("姓名='" + dt.Rows[i]["姓名"] + "'");
    dynamic index = temp.Rows.IndexOf(a(0));
    dt.Rows[i]["英语名次"] = index + 1;
    }
    dv.Sort = ""; this.DataGridView1.DataSource = dt;
    }
      

  4.   

     dynamic  类型怎么引用呀??
      

  5.   


    //datatable 结构 如下
    //  姓名 语文 数学 英语
    //  张三 60 70 88
    //  李四 70 60 67
    //  王五 90 90 77
    //  赵六 80 90 89{
    DataTable dt = new DataTable(); dt.Columns.Add("姓名"); dt.Columns.Add("语文", typeof(System.Int32));
    dt.Columns.Add("数学", typeof(System.Int32));
    dt.Columns.Add("英语", typeof(System.Int32));
    dt.Columns.Add("语文名次", typeof(System.Int32));
    dt.Columns.Add("数学名次", typeof(System.Int32));
    dt.Columns.Add("英语名次", typeof(System.Int32)); DataRow row = null; row = dt.NewRow();
    row["姓名"] = "张三";
    row["语文"] = "60";
    row["数学"] = "70";
    row["英语"] = "88";
    dt.Rows.Add(row); row = dt.NewRow();
    row["姓名"] = "李四";
    row["语文"] = "70";
    row["数学"] = "60";
    row["英语"] = "67";
    dt.Rows.Add(row); row = dt.NewRow();
    row["姓名"] = "王五";
    row["语文"] = "90";
    row["数学"] = "90";
    row["英语"] = "77";
    dt.Rows.Add(row); row = dt.NewRow();
    row["姓名"] = "赵六";
    row["语文"] = "80";
    row["数学"] = "90";
    row["英语"] = "89";
    dt.Rows.Add(row); DataTable temp = null; DataView dv = null; dv = dt.DefaultView;
    dv.Sort = "语文 asc"; temp = dv.ToTable();
    for (int i = 0; i <= dt.Rows.Count - 1; i++) {
    DataRow[] a = temp.Select("姓名='" + dt.Rows[i]["姓名"] + "'");
    int index = temp.Rows.IndexOf(a[0]);
    dt.Rows[i]["语文名次"] = index + 1;
    } dv = dt.DefaultView;
    dv.Sort = "数学 asc"; temp = dv.ToTable();
    for (int i = 0; i <= dt.Rows.Count - 1; i++) {
    DataRow[] a = temp.Select("姓名='" + dt.Rows[i]["姓名"] + "'");
    int index = temp.Rows.IndexOf(a[0]);
    dt.Rows[i]["数学名次"] = index + 1;
    }
    dv = dt.DefaultView;
    dv.Sort = "英语 asc"; temp = dv.ToTable();
    for (int i = 0; i <= dt.Rows.Count - 1; i++) {
    DataRow[] a = temp.Select("姓名='" + dt.Rows[i]["姓名"] + "'");
    int index = temp.Rows.IndexOf(a[0]);
    dt.Rows[i]["英语名次"] = index + 1;
    }
    dv.Sort = ""; this.DataGridView1.DataSource = dt;
    }
      

  6.   

    Select(筛选条件,排序条件) dynamic a = temp.Select("姓名='" + dt.Rows[i]["姓名"] + "'","语文名次 desc,数学名次 desc,英语名次 desc");
      

  7.   

    梦幻奇缘  14:57:21
    排序之后第二种
    table:
    名字   分数         名次
     A     100           1
     B     100           1
     C     90            3
     D     90            3
     E     80            5
     F     80            5
     G     70            7
    有知道这个效果的做法吗????
      

  8.   

      Dim temp As DataTable        Dim dv As DataView        dv = dt.DefaultView
            dv.Sort = "语文 asc"        temp = dv.ToTable
            temp.Columns.Add("_pm", System.Type.GetType("System.Decimal"))
            Dim x As Integer = 1
            For i As Integer = 0 To temp.Rows.Count - 1
                temp.Rows(i).Item("_pm") = x            If i <> temp.Rows.Count - 1 Then
                    If temp.Rows(i).Item("语文").ToString <> temp.Rows(i + 1).Item("语文").ToString Then
                        x = x + 1
                    End If
                End If
            Next
            For i As Integer = 0 To dt.Rows.Count - 1
                Dim a = temp.Select("姓名='" + dt.Rows(i)("姓名") + "'")
                Dim index = temp.Rows.IndexOf(a(0))
                dt.Rows(i)("语文名次") = a(0).item("_pm")
            Next