0

DataGridView に入力するデータベースがあります。

次のように Heder を押して、DataGridView を並べ替えようとします。

private void dataGridView1_ColumnHeaderMouseClick(object sender,DataGridViewCellMouseEventArgs e)
{
     SortOrder ss = dataGridView1.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection;
     string strColumnName = dataGridView1.Columns[e.ColumnIndex].Name;
     label8.Text = "Column: " + strColumnName + " - " + "sort order: " + ss.ToString();

     if (strColumnName == "Column9")
     {
        if (ss == SortOrder.Ascending)
        {
            A_table = "Tmp_Kabat_SfiraTbl";
            SQL = "SELECT Color,Line,Makat,Des,sQty,sNewQty,CountBy_Name,UserName,TermNum,NewQty,Qty from " + A_table + " order by NewQty asc";
        }
        else if (ss == SortOrder.Descending)
        {
            A_table = "Tmp_Kabat_SfiraTbl";
            SQL = "SELECT Color,Line,Makat,Des,sQty,sNewQty,CountBy_Name,UserName,TermNum,NewQty,Qty from " + A_table + " order by NewQty desc";
        }
            dsView = new DataSet();
            adp = new OleDbDataAdapter(SQL, Main.Conn);
            adp.Fill(dsView, A_table);
            adp.Dispose();
            dataGridView1.DataSource = dsView.Tables[A_table].DefaultView;
            this.dataGridView1.ClearSelection();
      }
}

その動作は一度だけで、昇順から降順の並べ替えに変更されません

何が問題なのですか?

4

2 に答える 2

1

HeaderCell の SortGlyphDirection を変更する必要があります。これを行う最善の方法は、 内のコードの最後の行ですdataGridView1_ColumnHeaderMouseClick

これは、いくつかの優れた並べ替えのサンプルです [DataGridViewColumnHeaderCell.SortGlyphDirection プロパティ][1]

そして今、これがサンプルでどのように使用されるか:

    private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        SortOrder ss = dataGridView1.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection;
        string strColumnName = dataGridView1.Columns[e.ColumnIndex].Name;

        PopulateDataGridView(ss, strColumnName);

        //change sorting...
        switch (ss)
        {
            case SortOrder.Ascending:
                ss = SortOrder.Descending;
                break;
            case SortOrder.Descending:
                ss = SortOrder.Ascending;
                break;
        }
        dataGridView1.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = ss;
        //change column sort mode...
        dataGridView1.Columns[e.ColumnIndex].SortMode = DataGridViewColumnSortMode.Programmatic;
    }

    void PopulateDataGridView(SortOrder ss, string strColumnName)
    {
        label8.Text = "Column: " + strColumnName + " - " + "sort order: " + ss.ToString();
        if (ss == SortOrder.Ascending)
        {
            A_table = "Tmp_Kabat_SfiraTbl";
            SQL = "SELECT Color,Line,Makat,Des,sQty,sNewQty,CountBy_Name,UserName,TermNum,NewQty,Qty from " + A_table + " order by " + strColumnName + " asc";
        }
        else if (ss == SortOrder.Descending)
        {
            A_table = "Tmp_Kabat_SfiraTbl";
            SQL = "SELECT Color,Line,Makat,Des,sQty,sNewQty,CountBy_Name,UserName,TermNum,NewQty,Qty from " + A_table + " order by " + strColumnName + " desc";
        }
        dsView = new DataSet();
        adp = new OleDbDataAdapter(SQL, Conn);
        adp.Fill(dsView, A_table);
        adp.Dispose();
        dataGridView1.DataSource = dsView.Tables[A_table].DefaultView;
        this.dataGridView1.ClearSelection();
    }

デフォルトの母集団には、次のようなものを使用できます。

PopulateDataGridView(SortOrder.Ascending, "Color");
于 2013-01-21T18:48:51.520 に答える
0

私はあなたが設定したと思います:

dataGridView1.DataSource = null 

次に割り当てます。

dataGridView1.DataSource = dsView.Tables[A_table].DefaultView;

それはうまくいくはずです(私は少し前に同様の問題を抱えていました..)、DataViewオーダープロパティを使用できる方法なら何でも(SQLステートメントを実行せずに)

于 2013-01-21T18:41:17.983 に答える