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

时间:2009-01-15 13:26:29

标签: c# .net

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

3 个答案:

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

然后你可以用更简单的方式遍历行 - 无论如何我想到了。