可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'm working in VS2008 on a C# WinForms app. By default when clicking on a column header in a DataGridView it sorts that column Ascending, you can then click on the column header again to sort it Descending.
I am trying to reverse this, so the initial click sorts Descending then the second click sorts Ascending and I haven't been able to figure out how to do this. Does anyone know?
Thanks
回答1:
You can set the HeaderCell SortGlyphDirection to Ascending, and then the next click will give you the descending order. The default is none.
dataGridView1.Sort(Column1, ListSortDirection.Ascending); this.Column1.HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending;
回答2:
foreach (DataGridViewColumn column in DataGridView1.Columns) { column.SortMode = DataGridViewColumnSortMode.Programmatic; }
and
private void DataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { var column = DataGridView1.Columns[e.ColumnIndex]; if (column.SortMode != DataGridViewColumnSortMode.Programmatic) return; var sortGlyph = column.HeaderCell.SortGlyphDirection; switch (sortGlyph) { case SortOrder.None: case SortOrder.Ascending: DataGridView1.Sort(column, ListSortDirection.Descending); column.HeaderCell.SortGlyphDirection = SortOrder.Descending; break; case SortOrder.Descending: DataGridView1.Sort(column, ListSortDirection.Ascending); column.HeaderCell.SortGlyphDirection = SortOrder.Ascending; break; } }
回答3:
I suggest below code
MyDGV.Sort(MyDGV.Columns[column_Index], ListSortDirection.Ascending);
回答4:
Take a look at DataGridView.SortCompare
. See slightly modified version of the msdn example below:
private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e) { // Try to sort based on the cells in the current column. e.SortResult = System.String.Compare( e.CellValue2.ToString(), e.CellValue1.ToString()); // descending sort e.Handled = true; }