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
姓名 语文 数学 英语
张三 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
将原始的DataTable数据进行循环,每次循环的时候对各个成绩进行排序,写个排序算法,算出分数在排序中的索引就可以了,记的是升序排序啊
'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
// 姓名 语文 数学 英语
// 张三 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;
}
//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;
}
排序之后第二种
table:
名字 分数 名次
A 100 1
B 100 1
C 90 3
D 90 3
E 80 5
F 80 5
G 70 7
有知道这个效果的做法吗????
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