2012-03-02 158 views
4

我有一個DataGridView,其中包含有包含日期​​的列。不幸的是,日期的格式爲DD.MM.YYYY,整個值爲1列,這是歐洲的通用日期格式。 DGV綁定到一個能夠進行排序和高級排序的BindingSource。如何按日期對DataGridView列(綁定到BindingSource)進行排序?

問題是:如果我只是使用DGV的標準排序,日期被視爲字符串(它們顯示在DataGridViewTextBoxColumn中),因此按日 - >月 - >年排序,但當然我想完全相反;我希望他們按照時間順序排序。

那麼,有沒有辦法按照我想要的方式對這些列進行排序呢?

  • 目前最簡單的方法是能夠使用DGV的SortCompare 事件,但顯然,如果DGV綁 到DataSoruce無法做到的。
  • 當然我使用Google,我總是得到「使用排序屬性進行高級排序」的解決方案。綁定到DGV的BindingSource確實支持排序和高級排序,但據我所知,這只是使我有可能按多列排序,但不提供按年 - >月 - >日對日期列進行排序的方法(或者更一般地說,允許我實現一種比較功能)。或者我錯過了什麼?

我有什麼選擇可以實現我想要的功能?在解釋時,請記住我是 - 對編程不熟悉的人 - 對這個Windows Forms的新東西不熟悉。

在此先感謝!

+0

看一看這篇文章,看看是否有幫助:DGV排序使用日期(http://stackoverflow.com/questions/857115/how-to-sort-a-datagridview-column) – Void 2012-03-02 08:23:01

+0

這絕對是訣竅,非常感謝你! – Yuk 2012-03-05 09:04:33

回答

0

也許這段代碼會給你一個ideea。首先,我設置數據:

DataTable dt = new DataTable(); 
dt.Columns.Add("DateOfBirth", typeof(DateTime)); 

dt.Rows.Add(new DateTime(1981, 10, 29)); 
dt.Rows.Add(new DateTime(1984, 8, 12)); 
dt.Rows.Add(new DateTime(1982, 9, 7)); 

bindingSource1.DataSource = dt; 
dataGridView1.DataSource = bindingSource1; 
dataGridView1.Columns[0].SortMode = DataGridViewColumnSortMode.Programmatic; 

現在使用ColumnHeaderMouseClick我們將執行排序第一列:

private SortOrder _sortDirection; 

    private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { 
     if (e.ColumnIndex == 0) { 
      string sort = string.Empty; 
      switch (_sortDirection) { 
       case SortOrder.None: 
        _sortDirection = SortOrder.Ascending; 
        sort = "asc"; 
        break; 
       case SortOrder.Ascending: 
        _sortDirection = SortOrder.Descending; 
        sort = "desc"; 
        break; 
       case SortOrder.Descending: 
        _sortDirection = SortOrder.None; 
        sort = string.Empty; 
        break; 
      } 

      dataGridView1.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = _sortDirection; 
      if (!string.IsNullOrEmpty(sort)) { 
       bindingSource1.Sort = "DateOfBirth " + sort; 
      } else { 
       bindingSource1.RemoveSort(); 
      } 
     } 
    } 

希望這有助於!

1
private void DataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e) 
{ 
    if (e.Column.Name == "YourColumnName") //<== this must be your date column name 
    { 
     DateTime dt1 = Convert.ToDateTime(e.CellValue1); 
     DateTime dt2 = Convert.ToDateTime(e.CellValue2); 
     e.SortResult = System.DateTime.Compare(dt1, dt2); 
     e.Handled = true; 
    } 
} 
相關問題