在C#/ ASP.NET 3.5中,我有一个从数据库中提取行的DataTable。 我想动态地将一个排序过滤器应用于数据表(可能是数据视图),然后循环遍历排序数据的“行”,以便为每个指标使用每一行。
我非常希望每次都不要在数据库中进行自定义排序,但我不确定如何从原始数据表中获取已排序的数据表。
我确定我忘了/遗漏了一些简单的东西,但我不记得怎么做了!
我想在“排序”列表中执行此操作。它目前正在我的查询的绑定列表上进行。
foreach (DataRow dr in dtTags.Rows)
{
LinkButton lbTag = new LinkButton();
lbTag.CssClass = "UserTagNoHover";
lbTag.ID = "hlUserTag" + dr["UserTagRID"].ToString();
lbTag.Text = dr["Name"].ToString();
//lbTag.Click += new System.EventHandler(this.Tag_OnClick);
lbTag.CommandName = "User_Click";
lbTag.CommandArgument = "hlUserTag" + dr["UserTagRID"].ToString();
lbTag.ToolTip = "Total uses: " + dr["TotalCount"].ToString();
Boolean bAlreadyExists = false;
foreach (LinkButton lbTest in pnlTags.Controls)
{
if (lbTest.ID == lbTag.ID)
{
bAlreadyExists = true;
}
}
if (bAlreadyExists == false)
{
pnlTags.Controls.Add(lbTag);
}
}
答案 0 :(得分:5)
DataTable.Select()函数完全符合您的要求。它的第二个String参数是一个排序字符串,其语法与SQL的相同: [Column Name] ASC, [Other column name] DESC等。
答案 1 :(得分:3)
DataTable table = ...
DataView view = table.DefaultView;
view.Sort = ...
view.RowFilter = ...
答案 2 :(得分:2)
鉴于您使用的是.NET 3.5,我将使用LINQ to DataSet。强类型DataTables更好,但是:
var rows = from row in dataTable.AsEnumerable()
orderby row.Field<int>("Age") // or whatever
select new
{
UserTagID = row.Field<string>("UserTagID"),
TotalCount = row.Field<int>("TotalCount")
// etc
};
然后你可以用更简单的方式遍历行 - 无论如何我想到了。