2013-01-21 28 views
0

我有數據庫,我填寫DataGridView。排序DataGridView不爲我工作

我嘗試通過按赫德這樣對我的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(); 
     } 
} 

其作品只有一次,它不從ASC變化降序排序

什麼可能是問題嗎?

回答

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"); 
+0

同樣的問題:( – Gold

+0

請參閱我的編輯答案。 –

+0

感謝您的幫助,但我需要抓住列和排序類型 - 並從中進行查詢。你能用我的示例代碼來幫助我嗎? – Gold

0

我認爲,如果你設置:

dataGridView1.DataSource = null 

,然後分配:

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

它應該工作(我有類似的問題,前一段時間..),任何方式,您可以使用數據視圖命令屬性(不執行sql語句)

+0

感謝您的幫助,我嘗試這一點 - 但還是同樣的問題仍然 – Gold