急救!!!求大神帮忙解决啊!!!

ll0908 2013-10-14 10:19:36
条件:
Levels:等级; Num:次数; No:排名;
DataTable dt = new DataTable();
dt.Columns.Add("Levels", typeof(string));
dt.Columns.Add("Num", typeof(string));
dt.Columns.Add("No", typeof(int));
DataRow dr1 = dt.NewRow();
dr1["Levels"] = "1";
dr1["Num"] = "7";
dt.Rows.Add(dr1);
dr1 = dt.NewRow();
dr1["Levels"] = "1";
dr1["Num"] = "5";
dt.Rows.Add(dr1);
dr1 = dt.NewRow();
dr1["Levels"] = "1";
dr1["Num"] = "3";
dt.Rows.Add(dr1);
dr1 = dt.NewRow();
dr1["Levels"] = "2";
dr1["Num"] = "6";
dt.Rows.Add(dr1);
dr1 = dt.NewRow();
dr1["Levels"] = "2";
dr1["Num"] = "4";
dt.Rows.Add(dr1);
dr1 = dt.NewRow();
dr1["Levels"] = "3";
dr1["Num"] = "0";
dt.Rows.Add(dr1);
dr1 = dt.NewRow();
dr1["Levels"] = "3";
dr1["Num"] = "9";
dr1 = dt.NewRow();
dr1["Levels"] = "3";
dr1["Num"] = "3";
dr1 = dt.NewRow();
dr1["Levels"] = "3";
dr1["Num"] = "4";
dt.Rows.Add(dr1);

问题 : 需要对dt进行同一等级下按次数进行排名,然后需要把排名的名次插入到dt当中
结果 : 排名 等级 次数
1 1 7
2 1 5
3 1 3
1 2 6
2 2 4
1 3 9
2 3 4
3 3 3
4 3 0
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gclol 2013-10-14
  • 打赏
  • 举报
回复
use Northwind
select p1.xh-t2.min_num+1 as r,p1.City,p1.LastName from (
select ROW_NUMBER() over (order by City,LastName desc) xh,City,LastName
from Employees) as p1
left join
(select min(t1.xh) as min_num,t1.city from (
select ROW_NUMBER() over (order by City) xh,City from Employees
) as t1 group by t1.City) as t2
on p1.City=t2.City

以Northwind数据库Employees表为例,按City和LastName降序排列,查询结果中的r列为每名员工在他所在城市中的小排名
Andy__Huang 2013-10-14
  • 打赏
  • 举报
回复

--前端html代码
<table cellpadding="0" cellspacing="0" border="0" class="pagerlist" id="MasterDataList">
    <tr >
        <td>
            排名
        </td>
        <td>
            等级
        </td>
        <td>
            次数
        </td>
    </tr>   
    <asp:Repeater runat="server" ID="repIndvCourseBooking" ViewStateMode="Disabled">
        <ItemTemplate>
            <tr class="row" >
                <td>
                    <%#Eval("td1")%>
                </td>
                <td>
                    <%#Eval("td2")%>
                </td>
                <td>
                    <%#Eval("td3")%>
                </td>
            </tr>
        </ItemTemplate>
        <AlternatingItemTemplate>
            <tr class="altrow">
                <td>
                    <%#Eval("td1")%>
                </td>
                <td>
                    <%#Eval("td2")%>
                </td>
                <td>
                    <%#Eval("td3")%>
                </td>
            </tr>
        </AlternatingItemTemplate>
    </asp:Repeater>
</table>



--后台查询与绑定
List<Obj> list = BookingSRV.GetObjList();
this.repIndvCourseBooking.DataSource = list.Select(t =>
{
    return new
    {
        td0 = t.Levels,
        td1 = t.Num,
        td2 = t.No,
    };
}).OrderByDescending(o=>o.td5);
this.repIndvCourseBooking.DataBind();
这是大概的格式,你只做修改就可以了 数据库的查询与排序用Rank()或Row_number()
threenewbee 2013-10-14
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Levels", typeof(string));
            dt.Columns.Add("Num", typeof(string));
            dt.Columns.Add("No", typeof(int));
            DataRow dr1 = dt.NewRow();
            dr1["Levels"] = "1";
            dr1["Num"] = "7";
            dt.Rows.Add(dr1);
            dr1 = dt.NewRow();
            dr1["Levels"] = "1";
            dr1["Num"] = "5";
            dt.Rows.Add(dr1);
            dr1 = dt.NewRow();
            dr1["Levels"] = "1";
            dr1["Num"] = "3";
            dt.Rows.Add(dr1);
            dr1 = dt.NewRow();
            dr1["Levels"] = "2";
            dr1["Num"] = "6";
            dt.Rows.Add(dr1);
            dr1 = dt.NewRow();
            dr1["Levels"] = "2";
            dr1["Num"] = "4";
            dt.Rows.Add(dr1);
            dr1 = dt.NewRow();
            dr1["Levels"] = "3";
            dr1["Num"] = "0";
            dt.Rows.Add(dr1);
            dr1 = dt.NewRow();
            dr1["Levels"] = "3";
            dr1["Num"] = "9";
            dt.Rows.Add(dr1);
            dr1 = dt.NewRow();
            dr1["Levels"] = "3";
            dr1["Num"] = "3";
            dt.Rows.Add(dr1);
            dr1 = dt.NewRow();
            dr1["Levels"] = "3";
            dr1["Num"] = "4";
            dt.Rows.Add(dr1);
            var query = dt.Rows.Cast<DataRow>()
                .GroupBy(x => int.Parse(x["Levels"].ToString()))
                .OrderBy(x => x.Key)
                .SelectMany(x => x.OrderByDescending(y => int.Parse(y["Num"].ToString())).Select((y, i) => new { y, i }));
            DataTable dt1 = new DataTable();
            dt1.Columns.Add("Levels", typeof(string));
            dt1.Columns.Add("Num", typeof(string));
            dt1.Columns.Add("No", typeof(int));
            DataRow dr2 = dt1.NewRow();
            foreach (var item in query)
            {
                dr2 = dt1.NewRow();
                dr2["Levels"] = item.y["Levels"];
                dr2["Num"] = item.y["Num"];
                dr2["No"] = item.i + 1;
                dt1.Rows.Add(dr2);
            }
            dt = dt1;
            foreach (DataRow item in dt.Rows)
            {
                Console.WriteLine("{0}\t{1}\t{2}", item["No"], item["Levels"], item["Num"]);
            }
        }
    }
}
1 1 7 2 1 5 3 1 3 1 2 6 2 2 4 1 3 9 2 3 4 3 3 3 4 3 0 Press any key to continue . . .
Andy__Huang 2013-10-14
  • 打赏
  • 举报
回复
这个数据的原始表在哪里?你应该给出原表数据,然后在数据库里做排序与计算,非常方便。一次性返回结果到前端,直接绑定到repeater,代码很简单。你自己构造dataTable那样是最麻烦,最笨的方法
gclol 2013-10-14
  • 打赏
  • 举报
回复
dt里的每一行都是你这么构造的,还是出自数据库?

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧