2010-12-02 9 views

Antwort

14

Nein, ich denke, die SortMode auf der Spalte direkt einstellen ist so gut wie es geht. Aber ehrlich, wen interessiert das? Was ist so schlimm an einer einfachen Schleife?

+1

gibt es ein kleines Problem mit Schleifen der einzelnen Spalte SortMode einzustellen, zum Beispiel: Sie erlaubt dem Anwender, mehrere Spalten hinzufügen möchten, dann müssen Sie erneut Schleife alles wieder, oder finde die hinzugefügte Spalte und setze ihren Sortiermodus. das ist ein bisschen mehr Arbeit (für den Fall des Umschleifens, in einem unmöglichen Fall des Hinzufügens von einzelnen Spalten zu einer bereits Tausenden von Spalten existierte, würde das zeitaufwendig sein) – am05mhz

13

Was ist daran so schlimm? Wenn es Sie Schleife über die Spalten stört oder mehrere Datagridview ist, können Sie eine Erweiterungsmethode für dieses schreiben:

public static class DatatGridViewExtensions 
{ 
    public static void SetColumnSortMode(this DataGridView dataGridView, DataGridViewColumnSortMode sortMode) 
    { 
     foreach (var column in dataGridView.Columns) 
     { 
      column.SortMode = sortMode; 
     } 
    } 
} 

es wie folgt verwendet:

BalancesGridView.SetColumnSortMode(DataGridViewColumnSortMode.NotSortable); 
+0

Dies erreicht nicht wirklich etwas. Dies macht alle Spalten in der Datagridview nicht sortierbar. Die Erweiterungsmethode selbst ist keine schlechte Idee, aber sie ist unvollständig. Es muss einen anderen Parameter und vielleicht sogar eine Überladung haben, damit eine Spalten-ID, ein Spaltenname oder eine Sammlung von beiden übergeben werden kann. –

+2

@Joel Etherton: Lesen Sie seine Frage noch einmal. Das OP möchte die Spaltenüberschriften sortieren generell deaktivieren. – VVS

+0

bekam es mit einer geringfügigen Änderung zu arbeiten: public static void SetColumnSortMode (das Datagridview Datagridview, DataGridViewColumnSortMode SortMode) { foreach (DataGridViewTextBoxColumn Spalte in dataGridView.Columns) {dataGridView.Columns [column.Name] .SortMode = DataGridViewColumnSortMode. NotSortable; } } – fa1c0n3r

3

Ich lief in dieses Problem heute. Ich habe diese Methode geschrieben und sie beim Laden des Formulars aufgerufen.

public void DisableGridviewSorting(DataGridView grid, int index) 
    { 
     //Index = DataGridView.Columns.Count 
     for (int i = 0; i < index; i++) 
     { 
      grid.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; 
     } 
    } 

Es sieht aus wie man so ziemlich das Datagridview stecken egal Schleifen, wie Sie es tun, es sei denn, Sie gebundene Daten verwenden. Dann können Sie für jede einzelne Spalte nicht sortierbar setzen.

7

Ich weiß nicht, warum niemand vorschlagen, dass Sie Linq Art und Weise, dies zu tun:

BalancesGridView.Columns.Cast<DataGridViewColumn>().ToList().ForEach(f => f.SortMode = DataGridViewColumnSortMode.NotSortable); 
+2

Das hilft nicht wirklich mit der Leistung. Macht den Code kurz. –

2

Wenn Sie das Datagridview zur Laufzeit bauen, Sie Spaltensortierung deaktivieren können als die Spalten des ColumnAdded Ereignis mit hinzugefügt:

private void BalancesGridView_ColumnAdded(object sender, System.Windows.Forms.DataGridViewColumnEventArgs e) 
{ 
    e.Column.SortMode = DataGridViewColumnSortMode.NotSortable; 
} 
0

In VB verwende ich ein kleines Unterprogramm I für jeden dgv nennen, wo ich die Spalten wollen sortierbar sein:

Public Sub subNo_Sort_DGV_Columns(dgv As DataGridView) 

    For intColumn_Count As Integer = 1 To dgv.Columns.Count - 1 
    dgv.Columns(intColumn_Count).SortMode = _ DataGridViewColumnSortMode.NotSortable 
    Next 

End Sub 
1

ich es auf diese Weise getan haben:

private void gvItReq_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) 
{ 
    for (int colIdx = 0; colIdx < gvItReq.Columns.Count; colIdx++) 
     gvItReq.Columns[colIdx].SortMode = DataGridViewColumnSortMode.NotSortable; 
} 
+0

Könnten Sie bitte Ihre Antwort näher erläutern, indem Sie ein wenig mehr Beschreibung der von Ihnen bereitgestellten Lösung hinzufügen? – abarisone

+0

Es wird funktionieren, aber das ist ein schlechter Weg, es zu tun. Für jede hinzugefügte Zeile setzen Sie den Sortiermodus der gleichen Spalte wieder und wieder und wieder ... – ehh

0

Der beste Weg, die ich gefunden habe Sortieranlage zu verhindern, ist zu definieren, ist es eine for-Schleife zu definieren, wenn Sie denken, Sie zu viele Spalten haben, zu beschäftigen.

for (int i = 0; i < 10; i++) 
{ 
    dataGridView.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; 
} 
+0

Was ist, wenn die Spaltenlänge kleiner als 10 ist? Dies wird eine Ausnahme auslösen. – InspiredCoder

+0

schlechtes Beispiel für eine Schleife und der Autor der Frage speziell für eine Alternative zu einer Schleife gefragt. auch nur Hinzufügen von Unordnung zum Q & A – workabyte

4

gut, das ist ein bisschen alt, aber es gibt ein kleines Problem mit Schleifen der einzelnen Spalte SortMode, zum Beispiel zu setzen, Sie Benutzer erlauben, mehr Spalten hinzufügen möchten, dann müssen Sie erneut Schleife alles oder finde die hinzugefügte Spalte und setze ihren Sortiermodus. das ist ein bisschen mehr Arbeit.

die Lösung, die ich ist wie diesem Link: Disable sorting when clicking DataGridView column header

drin, man muss nur ein Event-Handler von ColumnAdded für das Datagridview hinzuzufügen, so jedes Mal, wenn die Datagrid Spalte hinzufügt, wird es automatisch als nicht sortierbar

das ist eigentlich genau wie @ OldDogs Antwort, der Unterschied ist, dass in seiner Antwort der Sortiermodus auf Umwegen gesetzt wird.

4

Ich sage, das Durchschleifen von Spalten ist keine so gute Antwort, besonders wenn sich Ihre Datenquelle von Zeit zu Zeit ändert. Eine Zeile Code in der ColumnAdded Ereignis funktioniert der Trick:

e.Column.SortMode = DataGridViewColumnSortMode.NotSortable 
Verwandte Themen