Announcement

Collapse
No announcement yet.

Markierung mehrer Datensätze im DBGrid

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Markierung mehrer Datensätze im DBGrid

    Ich möchte mehrere Datensätze im DBGrid auswählen, ohne jeden einzeln anklicken zu müssen, sondern durch MouseMove oder gedrückter CNTRL-Taste und Auswahl per Key-Down markieren.

    Ich denke daß man so etwas über TBookmarkList erreichen könnte, habe aber keinen Schimmer wie man so etwas zuweisen kann.
    Wer weiß Rat oder liefert mir mal ein kleines Beispielprogrämmchen ?

    Bye - Peter

  • #2
    Morgen Peter!<br>

    Dein Problem läßt sich einfach lösen.<br>
    Du muß nur in Options dgRowSelect und dgMultiSelect setzen,<br>
    dann macht DBGrid den Rest.<br>
    Zugriff auf all markierten Datensätze hast Du über<br>
    DBGrid->SelectedRows->Items[]. ( SelectedRows = TBookmarkList*)<br>
    Mit GoToBookmark((void*)DBGrid->SelectedRows->Items[])bekommst<br>
    Du dann Zugriff auf den Datensatz.<br>
    <br>

    Gruß Fre

    Comment


    • #3
      Hi Fred,
      das habe ich natürlich alles so eingestellt, doch mir ist das zu umständlich. Ich will viele Datensätze markieren, indem ich einen Bereich z.B. bei gedrückter linken Maustaste markiere und die Datensätze vom Programm aus in die Bookmarklist schreibe (oder etwas ähnliches). Ich will <b>nicht</b> z.B. 200 Datensätze mit 200 Mausclicks markieren, sondern etwas Anwenderfreundliches programmieren.

      Gibt es weitere Möglichkeiten ?

      Bye - Pete

      Comment


      • #4
        Salve Peter!<br>

        int markStart, markEnde;
        OnColEnter setzt markStart wenn markStart == 0 <br>
        markStart = RecNo<br>
        Dann solltest Du das OnKeyDown Ereignis und 2 <br>variablen benutzen.<br>
        ssCtrl CTRL gedrück und markStart<br>
        ssLeft Linke Maustatste <br>
        dann mit OnKeyUp abfragen ob wieder losgelassen und markStart.<br>
        Muß jetzt auf die zelle klicken. <br>
        Jetzt wieder mit OnColEnter markEnde setzen.<br>
        markEnde = RecNo<br>
        <br>
        Jetzt kannst Du mit BookmarkList alle Datensätze markieren, so<br> hoffe ich.<br>
        markStart und markEnde wieder auf Null.<br>
        So ungefähr sollte man was draus machen.<br>
        Du kannst aber auch ohne Maus und nur mit Zellenklicks arbeiten,<br>
        ist auf jedenfall einfacher, da Du dann nur mit<br> OnColEnter arbeiten brauchst.<br>
        <br>

        Fre

        Comment


        • #5
          Danke Fred,<p>
          allerdings werd ich aus der Hilfe nicht schlau. Ich weiß einfach nicht wie man die Sätze in der BookmarkList markiert.
          Hast du dafür ein Beispiel?
          Bye - Pete

          Comment


          • #6
            Hi Peter!<br>

            Du mußt aber die Datensätz nicht einzeln markieren, mit Shift und<br>
            Pfeiltaste(wie in Windows üblich) geht es auch.<br>
            Trotzdem Beispiel:<br>
            // Table = Datenbank
            void setzeMarken( int beg, int end )<br>
            {<br>
            Table->First();// ersterdatensatz<br>
            Table->MoveBy( beg ); // auf ersten zu markierenden
            for( int i = beg; i < end; i++ )<br>
            {<br>
            bool ismarked = DBGrid->CurrentRowSelected;<br>
            if( ismarked == false ) // nicht vorhanden<br>
            DBGrid->CurrentRowSelected = true; // zuweisen <br>
            Table->MoveBy(1); <br>
            }<br>
            In der TDataSet kannst Du über Bookmark auch auf die aktuelle<br>
            Bookmarke zugreifen.<br>
            Ich hoffe damit kannst Du was anfangen.<br>

            <br>
            fred
            }<br&gt

            Comment


            • #7
              Hi Fred,
              alles klar und vielen Dank. Auf "Shift und Pfeiltasten" bin ich nie gekommen, ich hab es immer so wie im Explorer probiert: "Shift und Maus". Habe wieder was dazugelernt! Dann brauch ich ja eigentlich gar nix zu programmieren.
              Werde CurrentRowSelected aber mal ausprobieren. Ich wußte nicht, daß es damit geht.

              Vielen Dank und Tschüß - Pete

              Comment

              Working...
              X