已将查询回的结果保存在DataSet里,如何得到某一个用户的排名数?
不能遍历,因为用户有4种类型,要得到该用户在4种类型中的不同排名数,如果以1000人计,遍历次数就已经相当庞大了!
大家帮忙想点办法,如果能直接取到行号,岂不是很爽,可惜不是Oracle
14 个解决方案
#1
如果用排序呢?然后直接取行号
#2
你形成的DATASET肯定要在DATAGRID或其他的东西里显示呀,譬如你在DATAGRID显示的话,你给DATAGRID加一个行号就性了呀
private DataTable GetRowNumberTable(DataTable dt){
DataColumn col = new DataColumn("RowNumber",Type.GetType("System.Int32"));
dt.Columns.Add(col);
for(int i = 0;i<=dt.Rows.Count-1;i++){
if(0 == i)
dt.Rows[i][col] = 1;
else
dt.Rows[i][col] = Convert.ToInt32(dt.Rows[i-1][col]) +1;
}
return dt;
}
private DataTable GetRowNumberTable(DataTable dt){
DataColumn col = new DataColumn("RowNumber",Type.GetType("System.Int32"));
dt.Columns.Add(col);
for(int i = 0;i<=dt.Rows.Count-1;i++){
if(0 == i)
dt.Rows[i][col] = 1;
else
dt.Rows[i][col] = Convert.ToInt32(dt.Rows[i-1][col]) +1;
}
return dt;
}
#3
DataView dv = datatable.Copy().defaultview;
dv.RowFilter = "score >" + thisScore;//thisScore是当前这个用户的分数
那么他的排名
int userOrder = dv.count+1;
dv.RowFilter = "score >" + thisScore;//thisScore是当前这个用户的分数
那么他的排名
int userOrder = dv.count+1;
#4
这确实是个烦人的问题,DataRow偏偏就没有行号属性~~ 郁闷~~
如果这个table是绑定在DataGrid上就比较好办
DataGrid.Items[???].DataSetIndex 可取得该行的行号
否则
DataView dv = datatable.Copy().defaultview;
dv.RowFilter = "score >" + thisScore;//thisScore是当前这个用户的分数
那么他的排名
int userOrder = dv.count+1;
如果这个table是绑定在DataGrid上就比较好办
DataGrid.Items[???].DataSetIndex 可取得该行的行号
否则
DataView dv = datatable.Copy().defaultview;
dv.RowFilter = "score >" + thisScore;//thisScore是当前这个用户的分数
那么他的排名
int userOrder = dv.count+1;
#5
使用DataGrid也解决不了问题,如果只要排一次,遍历是肯定要有的!
但现在我的情况是:
假设一个公司有部门A、部门B等,而整个公司里的人只分类别C、类别D两种,各部门都有这两种人,同一个人只可能属于其中的一个部门,只属于其中的一种类别
最终要得到是所有用户的如下数据:
用户 分数 公司排名 在公司内所在类别的排名 所在部门的排名 在部门内所在类别的排名
有四五千人,如果全部遍历效率相当之低!
最好是能把每一类的所有排名全部排好,然后只遍历总表一次,其它排名去排好的数据集里定位取出排名数,这样可以提高效率!
用户表User(用户、组织机构ID、类别)
组织机构表Org(组织机构ID、所在部门ID)
分数表Score(用户、分数)
大家帮忙出点主意,主要是后两个排名比较麻烦!
但现在我的情况是:
假设一个公司有部门A、部门B等,而整个公司里的人只分类别C、类别D两种,各部门都有这两种人,同一个人只可能属于其中的一个部门,只属于其中的一种类别
最终要得到是所有用户的如下数据:
用户 分数 公司排名 在公司内所在类别的排名 所在部门的排名 在部门内所在类别的排名
有四五千人,如果全部遍历效率相当之低!
最好是能把每一类的所有排名全部排好,然后只遍历总表一次,其它排名去排好的数据集里定位取出排名数,这样可以提高效率!
用户表User(用户、组织机构ID、类别)
组织机构表Org(组织机构ID、所在部门ID)
分数表Score(用户、分数)
大家帮忙出点主意,主要是后两个排名比较麻烦!
#6
UP
#7
dataset(table).rows(行号).items(列号或列名)
#8
帝
#9
有没有好的解决方案啊! 请大家帮忙想点办法
#10
????
#11
郁闷
#12
可以使用這個自動顯示名次呀:
<asp:TemplateColumn>
<HeaderTemplate>
名次
</HeaderTemplate>
<ItemTemplate>
<div align="center"><strong><%#this.dgNewsList.CurrentPageIndex * this.dgNewsList.PageSize + Container.ItemIndex+ 1%>.</strong></div>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
名次
</HeaderTemplate>
<ItemTemplate>
<div align="center"><strong><%#this.dgNewsList.CurrentPageIndex * this.dgNewsList.PageSize + Container.ItemIndex+ 1%>.</strong></div>
</ItemTemplate>
</asp:TemplateColumn>
#13
可我并不是要显示所有排名,而是要把四种类型的排名数据高效率地取出来
#14
最终要得到是所有用户的如下数据:
用户 分数 公司排名 在公司内所在类别的排名 所在部门的排名 在部门内所在类别的排名
用户 分数 公司排名 在公司内所在类别的排名 所在部门的排名 在部门内所在类别的排名
#1
如果用排序呢?然后直接取行号
#2
你形成的DATASET肯定要在DATAGRID或其他的东西里显示呀,譬如你在DATAGRID显示的话,你给DATAGRID加一个行号就性了呀
private DataTable GetRowNumberTable(DataTable dt){
DataColumn col = new DataColumn("RowNumber",Type.GetType("System.Int32"));
dt.Columns.Add(col);
for(int i = 0;i<=dt.Rows.Count-1;i++){
if(0 == i)
dt.Rows[i][col] = 1;
else
dt.Rows[i][col] = Convert.ToInt32(dt.Rows[i-1][col]) +1;
}
return dt;
}
private DataTable GetRowNumberTable(DataTable dt){
DataColumn col = new DataColumn("RowNumber",Type.GetType("System.Int32"));
dt.Columns.Add(col);
for(int i = 0;i<=dt.Rows.Count-1;i++){
if(0 == i)
dt.Rows[i][col] = 1;
else
dt.Rows[i][col] = Convert.ToInt32(dt.Rows[i-1][col]) +1;
}
return dt;
}
#3
DataView dv = datatable.Copy().defaultview;
dv.RowFilter = "score >" + thisScore;//thisScore是当前这个用户的分数
那么他的排名
int userOrder = dv.count+1;
dv.RowFilter = "score >" + thisScore;//thisScore是当前这个用户的分数
那么他的排名
int userOrder = dv.count+1;
#4
这确实是个烦人的问题,DataRow偏偏就没有行号属性~~ 郁闷~~
如果这个table是绑定在DataGrid上就比较好办
DataGrid.Items[???].DataSetIndex 可取得该行的行号
否则
DataView dv = datatable.Copy().defaultview;
dv.RowFilter = "score >" + thisScore;//thisScore是当前这个用户的分数
那么他的排名
int userOrder = dv.count+1;
如果这个table是绑定在DataGrid上就比较好办
DataGrid.Items[???].DataSetIndex 可取得该行的行号
否则
DataView dv = datatable.Copy().defaultview;
dv.RowFilter = "score >" + thisScore;//thisScore是当前这个用户的分数
那么他的排名
int userOrder = dv.count+1;
#5
使用DataGrid也解决不了问题,如果只要排一次,遍历是肯定要有的!
但现在我的情况是:
假设一个公司有部门A、部门B等,而整个公司里的人只分类别C、类别D两种,各部门都有这两种人,同一个人只可能属于其中的一个部门,只属于其中的一种类别
最终要得到是所有用户的如下数据:
用户 分数 公司排名 在公司内所在类别的排名 所在部门的排名 在部门内所在类别的排名
有四五千人,如果全部遍历效率相当之低!
最好是能把每一类的所有排名全部排好,然后只遍历总表一次,其它排名去排好的数据集里定位取出排名数,这样可以提高效率!
用户表User(用户、组织机构ID、类别)
组织机构表Org(组织机构ID、所在部门ID)
分数表Score(用户、分数)
大家帮忙出点主意,主要是后两个排名比较麻烦!
但现在我的情况是:
假设一个公司有部门A、部门B等,而整个公司里的人只分类别C、类别D两种,各部门都有这两种人,同一个人只可能属于其中的一个部门,只属于其中的一种类别
最终要得到是所有用户的如下数据:
用户 分数 公司排名 在公司内所在类别的排名 所在部门的排名 在部门内所在类别的排名
有四五千人,如果全部遍历效率相当之低!
最好是能把每一类的所有排名全部排好,然后只遍历总表一次,其它排名去排好的数据集里定位取出排名数,这样可以提高效率!
用户表User(用户、组织机构ID、类别)
组织机构表Org(组织机构ID、所在部门ID)
分数表Score(用户、分数)
大家帮忙出点主意,主要是后两个排名比较麻烦!
#6
UP
#7
dataset(table).rows(行号).items(列号或列名)
#8
帝
#9
有没有好的解决方案啊! 请大家帮忙想点办法
#10
????
#11
郁闷
#12
可以使用這個自動顯示名次呀:
<asp:TemplateColumn>
<HeaderTemplate>
名次
</HeaderTemplate>
<ItemTemplate>
<div align="center"><strong><%#this.dgNewsList.CurrentPageIndex * this.dgNewsList.PageSize + Container.ItemIndex+ 1%>.</strong></div>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
名次
</HeaderTemplate>
<ItemTemplate>
<div align="center"><strong><%#this.dgNewsList.CurrentPageIndex * this.dgNewsList.PageSize + Container.ItemIndex+ 1%>.</strong></div>
</ItemTemplate>
</asp:TemplateColumn>
#13
可我并不是要显示所有排名,而是要把四种类型的排名数据高效率地取出来
#14
最终要得到是所有用户的如下数据:
用户 分数 公司排名 在公司内所在类别的排名 所在部门的排名 在部门内所在类别的排名
用户 分数 公司排名 在公司内所在类别的排名 所在部门的排名 在部门内所在类别的排名