2013-01-21 3 views
0

DataGridView 채우기 데이터베이스가 있습니다.정렬 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(); 
     } 
} 

의 작품을 한 번만, 그것은

어떤 문제가 될 수 정렬 DESC하는 ASC에서 변화를 해달라고? 지정 후

dataGridView1.DataSource = null 

과 : 당신이 설정 한 경우

답변

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 = dsView.Tables[A_table].DefaultView; 
작동한다

(내가 얼마 전에 비슷한 문제가 있었다 ..), 당신이 사용할 수있는 방법 DataView를 주문 속성 (SQL 문을 실행하지 않고)

+0

덕분에 도움을, 나는이 시도 -하지만 여전히 같은 문제 – Gold

관련 문제