DBGrid: Nur einzelne Zellen editierbar



  • Hallo Leute, habe da mal wieder eine Frage:
    Ich muss/will in einem DBGrid nur die bearbeitung einer einzelnen Spalte zulassen. Weiterhin darf kein Eintrag in der zubearbeitenden Zelle sein. (So eine Art Wareneingang, bei dem man nur das Eingangsdatum eintragen darf. Das Problem ist, dass das Grid solange ReadOnly bleiben soll, bis ein Button gedrückt und das Grid 'freigeschaltet' wird. Wenn ich nun festgestellt habe, dass die Zelle bearbeitbar ist(, und auf den Button zum freischalten drücke, dann ist das Grid zum Bearbeiten freigegeben, allerdings dann alle Zellen und nicht nur die soeben markierte.....

    It's too tricky for me..... 👎

    Versucht habe ich es so:

    void __fastcall THauptFormular::DBGridBestellungenCellClick(
          TColumn *Column)
    {       //wenn Klick auf Spalte "Eingangsdatum" und auf Zelle ohne Eintrag
    if (Column->Title->Caption == "EINGANGSDATUM" && DBGridBestellungen->SelectedField->AsString == "")
    {
    BtBestellEdit->Enabled = true;   //dann "Datensatz bearbeiten" freischalten
    }
    else BtBestellEdit->Enabled = false; //sonst "Datensatz bearbeiten deaktivieren
    
    }
    

    Gruß, Mouse



  • Die Spalte auswerten und dgEditing in den Gridoptions entsprechend setzen?

    PS.
    Allerdings weiss ich nicht recht, warum du einmal von einem Grid und dann wieder von einem Edit spricht.



  • Jansen schrieb:

    Die Spalte auswerten und dgEditing in den Gridoptions entsprechend setzen?

    jaja, wenn das so einfach wäre. Wie ich die Options zur Laufzeit ändere ann ich irgendiwe nicht so ganz finden. Dasmuss irgendwas mit nem Set oder so sein... 🙄

    Jansen schrieb:

    Allerdings weiss ich nicht recht, warum du einmal von einem Grid und dann wieder von einem Edit spricht.

    Nein Nein, Missverständnis:
    Mein Button "datensatz bearbeiten" hat den Namen BtBestellEdit; Bt für Button halt und Edit weil der die Methode Edit vom Clientdataset aufruft.

    Gruß, Mouse.



  • Ahso. Bei mir heissen Button immer btnXY oder so. 🙂

    Ansonsten:

    TDBGridOptions dbgo = DBGrid1->Options;
      if (DBGrid1->SelectedIndex > 0)
        DBGrid1->Options = dbgo >> dgEditing;
      else
        DBGrid1->Options = dbgo << dgEditing;
    

    Siehe auch die FAQ unter "Allgemein".



  • OkOk, sry for silly questions... 🤡

    Ach ja, und auf einmal funktioniert mein F1-Taste auch wieder im Builder 😉
    So auf einmal.....

    THX und Gruß, Mouse.....
    P.S.: Hatte nur nach DBGrid gesucht gehabt in der FAQ 🙄


Anmelden zum Antworten