2013-01-21 30 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