Button zu DataGridView hinzufügen



  • Wie prüfst du, welchen Index die Spalte hat? Ich habs mit CellContentClick gemacht. Aber auch wenn ich mir direkt nach dem Hinzufügen den Index ausgeben lasse, stimmt dieser. Vielleicht machst du aber auch etwas anderes.



  • Ich lasse mir den ColumnIndex über eine MessageBox beim Klicken des Grids ausgeben.

    Kann es evtl. daran liegen, dass ich zunächst die Daten aus der Datenbank als DataSource anbinde?!
    Wobei ich dies ja genau gleich nach dem Löschen einer Zeile so durchführe und da alles korrekt ist.



  • Mit der Datenbindung an sich wird das Problem nicht zusammen hängen. - Wichtig ist das der Index der Spalte erst nach dem Binden der Daten geändert wird und das hat sollte wie gesagt funktionieren.

    Mein Testcode ist:

    DataTable dtTest = new DataTable();
    dtTest.Columns.Add("ID", typeof(Int32));
    dtTest.Columns.Add("Name", typeof(string));
    
    for(int i = 0; i < 10; i++)
    	dtTest.Rows.Add(new object[] { i+1, "Test" + i.ToString() });
    
    this.dataGridView1.DataSource = dtTest;
    DataGridViewButtonColumn bnCol = new DataGridViewButtonColumn();
    bnCol.Text = "Löschen";
    bnCol.UseColumnTextForButtonValue = true;
    
    this.dataGridView1.Columns.Insert(2, bnCol);
    


  • Ganz komisch ... nun dachte ich, alles läuft prima und plötzlich geht es nicht mehr.
    Ich führe (an 2 unterschiedlichen Stellen) exakt die selbe Abfrage aus, nur die GridView ist eine andere.

    Einmal klappt es prima, der ColumnIndex beim Klick des Button ist 5 und beim anderen Aufruf ist dieser 0.

    Weshalb?? 😕

    private void InitLieferschein(DataGridView dg)
    {
    dg.DataSource = null;
    dg.Columns.Clear();
    
    DataTable table = DB.GetBestelldaten();
    dg.DataSource = table;
    
    // Button hinzufügen.
    DataGridViewButtonColumn bnAuswahl = new DataGridViewButtonColumn();
    bnAuswahl.HeaderText = "Speichern";
    bnAuswahl.Text = "Ok";
    bnAuswahl.UseColumnTextForButtonValue = true;
    
    dg.Columns.Insert(5, bnAuswahl);
    }
    


  • Ich tippe immernoch, das es 0 ist, weil keine Datenquelle zugewiesen ist. - Aber du behauptest ja, das dies immer vor der Abfrage der Fall ist.



  • Nun klappt es! Danke!



  • Und, magst uns auch aufklären, woran es hakte?



  • ICh kann es leider nicht erklären, weshalb es geklappt hat 😞

    Stehe nun wieder vor dem selben Problem???

    Ich tippe immernoch, das es 0 ist, weil keine Datenquelle zugewiesen ist. - Aber du behauptest ja, das dies immer vor der Abfrage der Fall ist.

    Wie kann ich das prüfen??

    Laut der Reihenfolge in meinem Code sollte das doch der Fall sein, oder nicht?

    void GetData()
            {
                dataGridView1.DataSource = null;
                dataGridView1.Rows.Clear();
                dataGridView1.Columns.Clear();
    
                DataTable table = DB.GetNumberPrefix();
                this.dataGridView1.DataSource = table;
    
                AddButton();
            }
    
            void AddButton()
            {
                DataGridViewButtonColumn bnCol = new DataGridViewButtonColumn();
                bnCol.Text = "Speichern";
                bnCol.UseColumnTextForButtonValue = true;
                this.dataGridView1.Columns.Insert(5, bnCol);
    
                dataGridView1.CellClick += new DataGridViewCellEventHandler(ddataGridView1_CellClick);
            }
    

    Entschuldige, aber ich verstehe es wirklich nicht 😕



  • Nach deiner Codereihenfolge sollte die Spalte natürlich an der richtigen Position sein, wenn du sie in der 6. Spalte haben möchtest.

    Allerdings frage ich mich, warum es nun plötzlich nicht mehr funktionieren soll, wenn es zuvor funktioniert hat. Was hast du denn in der Zwischenzeit geändert?



  • Die Spalte ist an der richtigen Position, nur der ColumnIndex ist 0

    Geändert: Eine neue Funktion und eine andere DataGridView



    1. Hast du wirklich mit der Buttonspalte 6 Spalten?
      -> Wenn ja sieht es für mich aus, als wenn nur der DisplayIndex gesetzt wird.
      -> Wenn nein, nutze den richtigen Index. Denn dieser ist 0-basiert.

    2. Wird nur der DisplayIndex gesetzt, musst du den ColumnIndex manuell anpassen.



  • inflames2k schrieb:

    1. Hast du wirklich mit der Buttonspalte 6 Spalten?
      -> Wenn ja sieht es für mich aus, als wenn nur der DisplayIndex gesetzt wird.
      -> Wenn nein, nutze den richtigen Index. Denn dieser ist 0-basiert.

    2. Wird nur der DisplayIndex gesetzt, musst du den ColumnIndex manuell anpassen.

    Ich dachte der ColumnIndex ist schreibgeschützt ...somit kann ich diesen doch nicht ändern/anpassen? 😕



  • Ist er auch, weiß gerade nicht mehr wie, aber irgendwie hat ich den auch schon umgebogen.

    Aber was mir gerade einfällt, ist der ColumnIndex für dich wirklich überlebensrelevant? - Ansonsten würde ich die Spalte nämlich mit einem Namen versehen und bei Prüfungen immer über den Namen zugreifen.



  • Danke für den Tipp!!
    So klappt es super 🙂


Anmelden zum Antworten