一千萬個為什麽

搜索

如何在DataBind之前對數據集進行排序?

我有數據以 DataSet 的形式來自數據庫。然後在執行 DataBind()之前將其設置為網格控件的 DataSource 。我想在一列上對 DataSet / DataTable 進行排序。該列是復雜的在數據庫中排序,但我希望我可以排序它,就像我會排序一個通用列表,即使用deligate。

這是可能的還是我必須將其轉移到不同的數據結構?

Edit I can't get any of these answer to work for me, I think because I am using .Net 2.0.

最佳答案

由於DataTable(和DataView)排序的工作原理,您不能直接使用委托方法。一種解決方法是向表示訂單的數據表添加一列,並根據所需的順序設置值(每行)。然後,您可以將排序添加到此新列中的視圖。例如(使用LINQ進行排序,只是為了簡潔):

var sorted = table.Rows.Cast().OrderBy(row => your code);
int sequence = 0;
foreach(var row in sorted)
{
    row["sequence"] = sequence++;
}

(如果你有一個類型化的數據集,那麽我認為你不需要Cast步驟,或者你會使用你的類型化的DataRow子類)

[編輯包含2.0]

In 2.0 (i.e. without LINQ etc) you could use a List to do the sort - a bit more long-winded, but:

        List sorted = new List();
        foreach(DataRow row in table.Rows)
        {
            sorted.Add(row);
        }
        sorted.Sort(delegate(DataRow x, DataRow y) { your code });
        int sequence = 0;
        foreach(DataRow row in sorted)
        {
            row["sequence"] = sequence++;
        }

(如果您使用的是類型化的數據集,則再次替換DataRow)

轉載註明原文: 如何在DataBind之前對數據集進行排序?