none
Gesuchte Zeile die in DataGrid markiert wird immer ganz oben im sichtbaren Bereich anzeigen RRS feed

  • Frage

  • Hallo, ich habe ein DataGrid, an das ist eine Tabelle gebunden.

    Nun habe ich eine Suchfunktion, die in der Tabelle nach der Zeile mit den übereinstimmenden Kriterien findet. Das klappt auch. Ich markiere dann die Zeile. Leider ist die Zeile machmal ganz unten, in der Mitte oder sonst wo. Ich hätte diese immer gerne in der Mitte oder ganz oben. Kann man das irgendwie einstellen?

     var startpos = _tblProgramm.AsEnumerable().Select((name, index) => new { Item = name, Position = index }).Where(x => x.Item["Zeile"].ToString().Contains(btn.Tag.ToString()));
                //string arbeitsGangLetzteZeile = "N" + (Convert.ToInt32(btn.Tag.ToString().Replace("N", "")) + 1);
                //var endpos = _tblProgramm.AsEnumerable().Select((name, index) => new { Item = name, Position = index }).Where(x => x.Item["Zeile"].ToString().StartsWith(arbeitsGangLetzteZeile));
                //// Im DataGrid die erste Zeile markieren
                dgProgramm.SelectedIndex = startpos.ToArray()[0].Position;
                dgProgramm.SelectedItem = "Zeile";
                dgProgramm.ScrollIntoView(dgProgramm.SelectedItem);
                //dgProgramm.UpdateLayout();


    oema von MSDN

    Donnerstag, 26. Juli 2012 15:37

Antworten

  • hallo oema

    Ich hatte eine ähnlich gelagerte Aufgabenstellung und mir durch einen relativ simplen Trick geholfen. Ich habe mit zwei Tabellen gearbeitet. Beide Tabellen (DataTable) waren identisch bis auf das Feld "SortOrderNo". Das Grid ist an eine View der originalen DataTable gebunden. Für die gefundene Zeile wurde dann in der 2. DataTable das Feld SortOrdrNo auf die Value 0 gesetzt. In einer Schleife wurde dann mittels eines Zählers vom ersten Datensatz dieser DataTable an, beginnend mit dem Wert 1, jeder Datensatz im Feld SortOrderNo einen Zähler nach oben gesetzt. Aussnahme natürlich der Datensatz der den Wert 0 im Feld SortOrderNo aufwies. Anschließend wurde auf diese DataTable über das Feld SortOrderNo sortiert, die Zeilen der gebundenen DataTable gelöscht und wieder mit den Zeilen der sortierten DataTable (ohne das Feld SortOrderNo wieder gefüllt.

    Sicherlich keine elegante Lösung, die zudem bei großen Datenmengen schnell an die Grenzen des Machbaren kommt. Aber für kleinere überschaubare Mengen funktioniert die Geschichte sehr zuverlässig. Theoretisch lässt sich alles über Sort lösen - gebraucht wird eben das zusätzliches Feld.

    viele Grüße


    Michael Lutz, BITsoft

    Donnerstag, 2. August 2012 18:49

Alle Antworten

  • hallo oema

    Ich hatte eine ähnlich gelagerte Aufgabenstellung und mir durch einen relativ simplen Trick geholfen. Ich habe mit zwei Tabellen gearbeitet. Beide Tabellen (DataTable) waren identisch bis auf das Feld "SortOrderNo". Das Grid ist an eine View der originalen DataTable gebunden. Für die gefundene Zeile wurde dann in der 2. DataTable das Feld SortOrdrNo auf die Value 0 gesetzt. In einer Schleife wurde dann mittels eines Zählers vom ersten Datensatz dieser DataTable an, beginnend mit dem Wert 1, jeder Datensatz im Feld SortOrderNo einen Zähler nach oben gesetzt. Aussnahme natürlich der Datensatz der den Wert 0 im Feld SortOrderNo aufwies. Anschließend wurde auf diese DataTable über das Feld SortOrderNo sortiert, die Zeilen der gebundenen DataTable gelöscht und wieder mit den Zeilen der sortierten DataTable (ohne das Feld SortOrderNo wieder gefüllt.

    Sicherlich keine elegante Lösung, die zudem bei großen Datenmengen schnell an die Grenzen des Machbaren kommt. Aber für kleinere überschaubare Mengen funktioniert die Geschichte sehr zuverlässig. Theoretisch lässt sich alles über Sort lösen - gebraucht wird eben das zusätzliches Feld.

    viele Grüße


    Michael Lutz, BITsoft

    Donnerstag, 2. August 2012 18:49
  • Hallo oema,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 3. August 2012 07:23
    Moderator