.NET/C# - 对DataTable进行排序,然后手动处理行

3
在C#/ASP.NET 3.5中,我有一个DataTable从数据库中获取行。 我希望动态地将排序过滤器应用于datatable(可以是dataview),然后循环遍历已排序数据的“行”以使用每个行进行一些度量。
我非常希望不必每次访问数据库来执行自定义排序,但我不确定如何从原始datatable中获取已排序的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);
                }
            }

你能贴一些代码让我们看看你正在处理什么吗? - Andrew Hare
3个回答

5

DataTable.Select()函数正是您所需的功能。它的第二个字符串参数是一个排序字符串,其语法与SQL相同:[列名] ASC,[其他列名] DESC等。


我个人更喜欢在可用的情况下使用LINQ。 - Jon Skeet
太好了!已经实现了。感谢您的完美答案。 - pearcewg

3

2

考虑到您正在使用.NET 3.5,我建议使用LINQ to DataSet。如果使用强类型的DataTable会更好,但是:

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
                  };

然后,您可以以更简单的方式迭代行 - 在我看来,无论如何。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接