C#使用接口对dataTable行进行排序

时间:2012-03-16 19:57:28

标签: c# sorting interface datatable

以下是我如何从数据库获取数据并将其添加到DataTable命名数据的代码, 我必须使用界面(越来越多)按行“Spelionu skaicius”的数据对所有表进行排序,但我不知道如何实现这一点,有人可以帮助吗? 我知道有很多方法可以对此进行排序,但我必须使用界面进行此操作。

using (FbConnection fbBD = new FbConnection(csb.ToString()))
{
    fbBD.Open();
    FbTransaction transact = fbBD.BeginTransaction();
    FbCommand sqlReq =
        new FbCommand("SELECT vardas,pavarde,sp_skaicius,spelioniu_sk FROM zaidejai WHERE atspetas='Taip'", fbBD, transact);
    using (FbDataReader r = sqlReq.ExecuteReader())
    {
        while (r.Read())
        {
            DataRow rw = dt.NewRow();
            rw["Vardas"] = r.GetString(0);
            rw["Pavarde"] = r.GetString(1);
            rw["Skaicius"] = r.GetValue(2);
            rw["Spelionu skaicius"] = r.GetValue(3);
            data.Rows.Add(rw);
        }
    }
    transact.Commit();
    fbBD.Close();
}

P.S。抱歉我的英文

2 个答案:

答案 0 :(得分:1)

使用数据表DefaultView属性:

data.DefaultView.Sort = "Spelionu skaicius";

然后您可以使用data.DefaultView(数据视图)或者如果您需要数据表,您可以这样做:

data = data.DefaultView.ToTable();

< - EDIT - >

以上是定期排序。如果要使用IComparable,则必须使用自定义clases而不是DataTable。 Here解释了如何。

答案 1 :(得分:1)

最好让数据库对数据进行排序,相反,我会将您的选择更改为:

    SELECT vardas,pavarde,sp_skaicius,spelioniu_sk 
    FROM zaidejai 
    WHERE atspetas='Taip'
    ORDER BY spelioniu_sk

请注意,我使用了spelioniu_sk,因为这是select中列出的第4列,然后在数据表定义中映射到Spelionu skaicius

如果在从数据库获取数据后仍然必须对数据表进行排序(可能是以不同的顺序),则可以使用DataTable的DataView原理:

data= data.DefaultView.Sort = "`Spelionu skaicius` ASC";

OR

data = data.DefaultView.Sort = "`Spelionu skaicius` DESC";

取决于您需要排序的顺序。

注意:我不确定上面的Sort Expression是否可以正常工作。由于您决定在中间用空格命名列,您可能需要将两个单词括在反引号中(如上所述)或方括号(例如[Spelionu skaicius] ASC