排序从数据库填充的列表框

时间:2011-04-17 03:36:57

标签: c#

好的,我正在使用此代码从组合框选择中填充checkedlistbox。我需要对checkedlistbox和组合框进行排序。现在,我有一个问题排序他们。我认为在数据库中重新排序它们会做到这一点,但它们是基于创建时间而不是其他任何东西出现的。

这个顶部填充组合框,我需要按字母顺序排序。

    private void cmbDatabaseFill()
    {
        string conStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=myDB.mdb";
        try
        {
            myConn = new OleDbConnection(conStr);
            myConn.Open();
        }
        catch (OleDbException ex)
        {
            MessageBox.Show("Error in connection ..." + ex.Message);
            return;
        }

        string sqlStr = "SELECT * FROM Index;";

        dAdapter = new OleDbDataAdapter(sqlStr, myConn);

        dset = new DataSet();

        dAdapter.TableMappings.Add("Table", "Index");

        dAdapter.Fill(dset);

        this.dviewmanager = dset.DefaultViewManager;

        this.cmbIndex.DataSource = this.dviewmanager;

        this.cmbIndex.DisplayMember = "Index.list";

        this.myConn.Close();
    }

这个用于checkedlistbox,我需要根据数据库中的“order”字段对其进行排序。 “订单”列只包含显示内容应显示顺序的数字。

    private void clbDatabaseFill()
    {
        string newTableName = cmbIndex.Text.Replace(" ", "");

        string conStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=myDB.mdb";
        try
        {
            myConn2 = new OleDbConnection(conStr);
            myConn2.Open();
        }
        catch (OleDbException ex)
        {
            MessageBox.Show("Error in connection ..." + ex.Message);
        }

        string sqlStr = "SELECT * FROM " + newTableName + ";";

        dAdapter2 = new OleDbDataAdapter(sqlStr, myConn2);

        dset2 = new DataSet();

        dAdapter2.TableMappings.Add("Table", newTableName);

        try
        {
            dAdapter2.Fill(dset2);
        }
        catch (System.Exception)
        {
            return;
        }

        this.dviewmanager2 = dset2.DefaultViewManager;

        this.clbList.DataSource = this.dviewmanager2;

        this.clbList.DisplayMember = newTableName + ".Name";

        this.myConn2.Close();
    }

现在,正如我所说,一切都正常显示和运行,我正在从checkedlistbox中获取我需要的值,以后使用DataRowView引用db中的列名而不是绑定一个valuemember,因为我每个处理多个值行。最大的问题是它不是基于“订单”列显示,也不是它在数据库中的显示方式。有没有一种简单的方法来完成这两种不同的排序方法?

1 个答案:

答案 0 :(得分:0)

在设置.DataSource属性之前,尝试将这些行添加到各自的组合框和检查表中:

 this.dviewmanager.DataViewSettings["Index"].Sort = "Order DESC";

 this.dviewmanager2.DataViewSettings[newTableName].Sort = "Order DESC";

DataViewSettings["Index"]DataViewSettings[newTableName]引用数据集中指定的DataTable。

Order DESC表示要排序的列名为Order,DESC显然表示顶部的最大值。删除DESC或根据您的要求指定ASC。