簡體   English   中英

如何按字母順序對數據網格中的列標題進行排序? C#

[英]How can I sort the column headers in a datagrid alphabetically? c#

我有一個包含列標題的排序列表,如何重新排列我的datagridview所以它與我的排序列表的順序相同?

我已經嘗試了下面的代碼,但這並不總是有效,有些列沒有正確排序。 感謝您的幫助。

sortedColumnNames.Sort();

    foreach (DataGridViewColumn col in dataGridView1.Columns)
                    {
                        col.DisplayIndex = sortedColumnNames.IndexOf(col.HeaderText);
                    }

sortedColumnNames:athens crete corfu kefalonia mykonos rhodes santorini skiathos zante

我不知道你的問題是否SortedColumnNames沒有正確排序(它不是這樣),或者是否為列分配的順序與列表中顯示的順序不同。

如果它是后者,那么可以想象,因為當你在迭代它時,你正在修改集合中項目的順序。 雖然我沒有在我正在運行的任何測試中看到這種情況。

作為一般規則,我不會弄亂我正在迭代的集合的成員資格順序。 我用這種方式實現列排序:

void SortDataGridViewColumns(DataGridView dgv)
{
    var list = from DataGridViewColumn c in dgv.Columns
               orderby c.HeaderText
               select c;

    int i = 0;
    foreach (DataGridViewColumn c in list)
    {
        c.DisplayIndex = i++;
    }
}

似乎應該工作。 我剛剛寫了一個快速應用程序進行測試,它運行良好。 你可以准確地確定它什么時候工作,什么時候不工作? 當你說它們不起作用時,是否總是出現故障的相同列?

你可以這樣做:

  1. 將所有列添加到List tmpColumns
  2. 從dgv.Columns中刪除所有列
  3. 按名稱對tmpColumns進行排序
  4. 將列從tmpColumns添加回dgv.Columns,並將DisplayIndex設置為下一個值0,1,2,依此類推。

它並不理想,但它有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM