Announcement

Collapse
No announcement yet.

Wie nimmt man Einfluss beim DatagridView auf die CurrentRow-Markierung ?

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

  • Wie nimmt man Einfluss beim DatagridView auf die CurrentRow-Markierung ?

    Ich würde in einem dataGridview mit Datenbindung gern Einfluss auf die Markierung (z.B. Farbe der Markierung) nehmen, habe aber nichts passendes in den Eigenschaften gefunden. Wie kann man die Markierung beim FullRowSelect beeinflussen?

    Zusätzlich wird über ein Button eine CheckBox im dataGridView gesetzt (Vorgabe des Auftraggebers) und nicht im dataGridView selbst.
    Das funktioniert auch, aber nach dem erneuten Einlesen der Daten in das DataGridView wird die CurrentRow wieder auf den Anfang (also auf die erste Zeile) gesetzt. Ich möchte aber die aktuelle (gerade geänderte) Zeile (wieder FullRowSelect) beibehalten. Das ist mir bisher leider nicht gelungen. Wie kann ich dies bewerkstelligen?

  • #2
    Wie kann ich dies bewerkstelligen?
    Zeile merken. Daten holen. Gemerkte Zeile wieder setzen.

    Ich würde in einem dataGridview mit Datenbindung gern Einfluss auf die Markierung (z.B. Farbe der Markierung) nehmen, habe aber nichts passendes in den Eigenschaften gefunden. Wie kann man die Markierung beim FullRowSelect beeinflussen?
    Ziehen die Einstellungen in DefaultCellStyle nicht?

    Comment


    • #3
      Vielen Dank für die Hilfe.

      Allerdings meine ich mit Markierung nicht den Stil der Zellen, sondern den Markierungsrahmen (meist in blau!) selbst. Den würde ich in zwei Sonderfällen gerne komplett ausblenden, da diese Sonderfälle nur ein einspaltiges ReadOnly DataGridView sind, um eine Liste anzuzeigen (ListBox passte wegen des Aussehens nicht). Da man nichts auswählen kann, irritiert der immer auf die erste Stelle befindliche Markierungsrahmen. Meine Frage zielte darauf ab, wie man diesen ausblendet bzw. für den Spezialfall komplett abschaltet, so dass bei Anzeige keine Zeile/Spalte oder Zelle selektiert ist. Wie geht das?

      Comment


      • #4
        Mach doch die Rahmenfarbe einfach gleich der Hintergrundfarbe. Dann ist zwar die Selektion noch da, aber man sieht sie nicht.

        Comment


        • #5
          Wie komme ich denn an die Eigenschaften des Markierungsbalken heran?

          Comment


          • #6
            CellStyle.SelectionBackColor, CellStyle.SelectionForeColor

            Comment


            • #7
              Danke, das probiere ich sofort aus!

              Comment


              • #8
                Du meinst glaube ich den Focus nicht die Selektion (du spricht mal von Rahmen und mal von Balken, verwirrend). Die Rahmen für den Focus lässt sich glaube ich nicht einfach steuern. Man kann aber das Zeichnen selbst übernehmen und dann eben das ganze ohne Focus Rahmen zeichnen.

                [Highlight=C#]private void dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
                {
                e.Paint(e.CellBounds, DataGridViewPaintParts.All & ~DataGridViewPaintParts.Focus);
                e.Handled = true;
                }[/Highlight]

                Comment


                • #9
                  Ich habe das gerade ausprobiert, aber es funktioniert leider nicht, denn die Markierung (ob der Markierungsrahmen oder Markierungsbalken oder anders heißt, weiß ich leider nicht!) wird trotzdem angezeigt. Man kann das Steuerelement trotz des Vorschlags ~DataGridViewPaintParts.Focus fokussieren.

                  Was ich letztlich haben wollte ist die Anzeige der Spalte im DataGridView ohne, dass diese CurrentRow für den Anwender sichtbar ist, hier bei mir wird das durch einen Windows-blauen Balken angezeigt (dieselbe Farbe wie auch die ColumnHeader eingefärbt sind)

                  Ich habe einen Screenshot attacht, der das Verhalten der DataGridViews aufzeigt. Das 3. DataGridView (Rechtename) habe ich lt.Tip von fanderlf angepasst und das 2. DataGridView (Gruppenname) so wie das im CellPainting-Ereignis in der obigen Antwort steht und man sieht, dass es nicht funktioniert, da dieser blaue Balken immer noch da ist!
                  Zuletzt editiert von CaroAs; 25.06.2010, 15:09. Reason: Habe 2. und 3. dataGridView vertauscht

                  Comment


                  • #10
                    Habe das gerade auch mal schnell gecheckt. Ich bekomme mit folgendem Code weder Selection angezeigt noch Focus. (Grid ist einfach auf eine Form geworfen ich habe an keiner Property gedreht)

                    [Highlight=C#]private void Form1_Shown(object sender, EventArgs e)
                    {
                    dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                    dataGridView1.MultiSelect = false;
                    dataGridView1.DataSource = new DirectoryInfo(@"C:/").GetFiles();
                    dataGridView1.DefaultCellStyle.SelectionBackColor = dataGridView1.DefaultCellStyle.BackColor;
                    dataGridView1.DefaultCellStyle.SelectionForeColor = dataGridView1.DefaultCellStyle.ForeColor;
                    dataGridView1.CellPainting += dataGridView1_CellPainting;
                    }

                    void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
                    {
                    e.Paint(e.CellBounds, DataGridViewPaintParts.All & ~DataGridViewPaintParts.Focus);
                    e.Handled = true;
                    }[/Highlight]


                    Edit: Die Unterscheidung Rahmen oder Balken sollte dir doch klar sein oder? Das eine ist gefühlt das andere nicht. Focus ist ein Rahmen, Selektion eher ein Balken.

                    Comment


                    • #11
                      Hallo Ralf Jansen,
                      vielen Dank für die Antwort. Die SelectionBackColor und SelectionForeColor habe ich ebenfalls angepasst, so bekomme ich den 'Balken' nicht angezeigt. Ich werde das Fokussieren nochmal prüfen, ob ich da ins falsche DataGridView geschaut hatte. Deshalb nochmal danke für die ausführliche Erklärung.

                      Die Unterscheidung zwischen Rahmen und Balken ist mir natürlich im Alltag schon klar, aber in Bezug auf (eingedeutschtem) MS-Text ist es ohne eine Definition beider Begriffe nicht mehr so klar. Dazu muss man eben wissen, was wofür verwendet wird.

                      Comment

                      Working...
                      X