我正在尝试将新列添加到作为等级的数据表中。为此,我想在排序后遍历每一行,然后为从1开始的每一行分配一个等级。
下面是我的代码。但是,排名是在排序之前分配给行的。
因此,我的排名计算并未执行应做的事情。这样可以增加排名吗?
protected void bindGridView(GridView gv)
{
using(DataTable dt = getData())
{
DataColumn dc_Total = new DataColumn("Total");
DataColumn dc_Rank = new DataColumn("Rank");
dt.Columns.Add(dc_Total);
dt.Columns.Add(dc_Rank);
dc_Rank.SetOrdinal(1);
dc_Total.SetOrdinal(2);
foreach (DataRow dr in dt.Rows)
{
dr["Total"] = Convert.ToDouble(dr["A_B_PERC"].ToString()) + Convert.ToDouble(dr["C_PERC"].ToString());
}
dt.DefaultView.Sort = "Total";
int rank = 1;
foreach(DataRow dr in dt.Rows)
{
dr["Rank"] = rank;
rank++;
}
gv.DataSource = dt;
gv.DataBind();
}
}
答案 0 :(得分:0)
我可以使用以下代码解决问题:
protected void bindGridView(GridView gv)
{
using(DataTable dt = getData())
{
DataColumn dc_Total = new DataColumn("Total");
DataColumn dc_Rank = new DataColumn("Rank");
dt.Columns.Add(dc_Total);
dt.Columns.Add(dc_Rank);
dc_Rank.SetOrdinal(1);
dc_Total.SetOrdinal(2);
foreach (DataRow dr in dt.Rows)
{
dr["Total"] = Convert.ToDouble(dr["A_B_PERC"].ToString()) + Convert.ToDouble(dr["C_PERC"].ToString());
}
dt.DefaultView.Sort = "Total";
using(DataView dv = dt.DefaultView)
{
int rank = 1;
foreach (DataRowView drv in dv)
{
drv["Rank"] = rank;
rank++;
}
gv.DataSource = dv;
gv.DataBind();
}
}
}
希望这对其他有类似问题的人有所帮助。