2017-06-29 4 views
0

Wenn ich eine Datagridview aus einer Datenquelle laden,Programmatically Zellen in einer gefilterten Datagridview ändern

this.exampleTableAdapter.Fill(this.refdataDataSet.Example); 

einen Filter über die Bindungsquelle Nehmen

exampleBindingSource.Filter = "TrackingId = 'x'"; 

und dann über den gefilterten Datagridview zu wiederholen versuchen und modifiziere sie

foreach (DataGridViewRow row in datagridExampleList.Rows) 
{ 
    //Tried to set rows directly 
    row.Cells["TrackingId"].Value = ""; 
    //Also tried variations of setting the DataBoundItem directly 
} 

Allerdings wird es nicht iterieren über die gesamte Sammlung fo Aus irgendeinem Grund.

Wenn ich debuggen bekomme ich die Zeilen Sammlung zurückgegeben (gefiltert mit x-Elemente mit dem Filter übereinstimmen), aber wie ich die Werte in der Sammlung (speziell die Werte, die das Ziel des Filters sind) ändern die Sammlung im laufenden Betrieb und die Iteration verpasst Elemente, selbst wenn der Filter angehalten ist und Listenänderungsereignisse auf "false" gesetzt wurden.

Nichts scheint zu funktionieren.

Irgendwelche Vorschläge?

+0

Nach der Einstellung Dataview Filterkriterium wird die Zeilen verbergen, die das Kriterium nicht erfüllen, und sie für Iteration unsichtbar. Wenn Sie jedoch trotzdem alle Zeilen durchlaufen müssen, können Sie die Filter-Eigenschaft vor der Iteration auf NULL setzen und dann nach Abschluss der Iteration wiederherstellen. Aber Sie sagen, dass Sie die Zeilen Ihrer DataGridView durchlaufen. Bitte geben Sie Ihren Code an, damit wir das Problem reproduzieren können. – Bahrom

+0

Danke Bahrom (Herr der Ringe?) - Ich habe weitere Informationen zu meiner Frage hinzugefügt, ich habe im Wesentlichen ein minimales Projekt erstellt und kann das Problem (widerwillig, Fehler zu sagen) mehrmals unter verschiedenen Umständen reproduzieren. Grundsätzlich ziehen WinForms, eine beliebige Datenquelle, eine Datagridansicht auf die Oberfläche, eine Schaltfläche, um die Daten nach Belieben zu filtern, und eine weitere Schaltfläche, um die gefilterten Elemente zurückzusetzen. <- Thius ist das Problem. Die Daten werden wiederholt und geändert. Voila ... nicht alle Zeilen können verändert werden –

Antwort

1

Der folgende Code muss Sie alle Zeilen ändern können.

  var filter = exampleBindingSource.Filter; 
      exampleBindingSource.Filter = null; 
      foreach (DataGridViewRow row in datagridExampleList.Rows) 
      { 
       //Tried to set rows directly 
       row.Cells["TrackingId"].Value = ""; 
       //Also tried variations of setting the DataBoundItem directly 
      } 
      exampleBindingSource.Filter = filter; 
+0

Das hat funktioniert, danke .. So einfach am Ende :) –

+0

Gern geschehen. – Bahrom

0

die Zeile enumerator zu vermeiden, können Sie Schleife versuchen stattdessen:

int c = datagridExampleList.Columns["TrackingId"].Index; 

for (int r = datagridExampleList.RowCount - 1; r >= 0; r--) 
    datagridExampleList[c, r].Value = ""; 
Verwandte Themen