DataGridView / DataView / filtern von neu hinzugefügten Datensätzen

11/02/2011 - 13:59 von DIMIM | Report spam
Ich habe folgendes Problem (WinForm, DataGridView mit DataView)

Ich lese in ein DataGridView die Datensàtze manuell ein aus einer
Datei.
Etwa so (nur notwendige Zeilen zum Überblick):

//Load-Methode der Form:


tabelle = new DataTable("Daten");
tabelle.Columns.Add("Datum", typeof(DateTime));
tabelle.Columns.Add("Wert", typeof(String));
sicht = new DataView(tabelle);

DataRow row;

// Daten werden in einer Schleife eingelesen
row = tabelle.NewRow();
row["Datum"] = ...
...
tabelle.Rows.Add(row);
// SchleifeEnde

// dgvTabelle ist das DataGridView auf der Form
dgvTabelle.DataSource = sicht;


// EnedLoad




Auf der Form ist ein Schalter zum Hinzufügen von weiteren Records,
sowie Möglickeiten für die Filterung.


// Hinzufügen Button
// Button Click

DataRow row = tabelle.NewRow();
row["Datum"] = DateTime.Now.Date;
row["Wert"] = ""; // soll manuell eingetragen werden

tabelle.Rows.Add(row);

// Hier folgt ein Versuch, die neue Zeile zu aktiven Zeile zu machen
// und das Feld Wert zum aktiven Feld mit Cursor

for (int i = 0; i < dgvTabelle.Rows.Count; i++)
if ((DateTime)dgvTabelle.Rows[i].Cells[0].Value =DateTime.Now.Date &&

String.IsNullOrEmpty(dgvTabelle.Rows[i].Cells[1].Value.ToString()))
{
dgvTabelle.Rows[i].Cells["Wert"].Selected = true;
dgvTabelle.Rows[i].Cells["Wert"].DataGridView.Focus();
break;
}

// Funktioniert nicht immer wie gewünscht (der Cursor ist nicht immer
im Feld "Wert").

// Ende Button Click


Wenn ich danach sofort nachdem ich einen Text in das Feld eingegeben
habe (ohne es zu verlassen) auf den RadioButton für die Filterung
klicke, so wird dieser neu eingefügte Datensatz nicht gezeigt, obwohl
er das Kriterium erfüllt. Andere Datensàtze mit dem selben Wert werden
gezeigt, der neue, nur nachdem ich zuerst im Grid die Zeilen - u.U.
erst mehrmals - gewechselt habe.



// RadioButton CheckedChanged

if (dgvTabelle.CurrentRow.Cells["Wert"].Value.ToString() == "")
return;
sicht.RowFilter = "Wert='" +
dgvTabelle.CurrentRow.Cells["Wert"].Value.ToString() + "'";

// Ende RadioButton



Was muss man machen, damit der neu hinzugefügte Datensatz sofort im
DataGrid "existiert" und unter den gefilterten Datensàtzen erscheint?
Das Folgende funktioniert nicht:

if (dgvTabelle.IsCurrentCellDirty)
dgvTabelle.CommitEdit(DataGridViewDataErrorContexts.Commit);

egal, ob ich es in in CellLeave, CellValueChanged, RowEnter,
Validating, Validated, ... einfüge.

Danke an alle ausgebildeten / erfahrenen C#-ler :-))
 

Lesen sie die antworten

#1 DIMIM
12/02/2011 - 10:59 | Warnen spam
On 11 Feb., 13:59, DIMIM wrote:

Danke an alle ausgebildeten / erfahrenen C#-ler :-))



Hat sich erledigt.

Nach 3 Tagen Suche habe ich die Eigenschaft des Grids bei
CausesValidation auf true gesetzt - und es làuft wie gewünscht.

D.h. das einzige, was noch nicht funktioniert, ist das Setzen des
Cursors in das Feld der neu hinzugefügten Zeile.

Ähnliche fragen