In gebundenes Datagridview Zeile hinzufügen

Trebjun

Grünschnabel
Hallo,

ich habe folgendes Problem:

in meiner Anwendung habe ich ein datagridview, was ich erst zur Laufzeit an eine Datenquelle binde. Nun möchte ich, dass der Anwender neue Datensätze im gridview hinzufügen kann. Doch durch die Datenbindung zur Laufzeit habe ich unten nicht die leere Zeile mit dem *, wo man automatisch eine Zeile hinzufügen kann, daher wollte ich mit datagridview.Rows.Add(); eine neue Zeile hinzufügen. Aber dann kommt diese Fehlermeldung: :confused:

"Zeilen können nicht automatisch zur Zeilenauflistung der DataGridView hinzugefügt werden, wenn das Steuerelement datengebunden ist."

Jetzt habe ich versucht, die Datenbindung zu lösen und dann die Zeile hinzufügen aber das
gelingt mir irgendwie auch nicht.
Hat jemand vielleicht eine Idee, wie ich das Problem lösen kann? :confused:

Danke!

Gruss,
Trebjun
 
Hab mal schnell ein kleines Testprojekt für dich gemacht
PHP:
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        list.Add(new Test("hallo", "du"));
        list.Add(new Test("irgendwas", "anderes"));
        list.Add(new Test("sinnlos", "Text"));
    }

    protected override void OnShown(EventArgs e)
    {
        base.OnShown(e);

        testBindingSource.DataSource = list; //testBindingSource vom Typ BindingSource, dataGrid hält als DataSource testBindingSource
    }

    private void button1_Click(object sender, EventArgs e)
    {
        list.Add(new Test("neue", "")); //hier wird neue Zeile der BindingList hinzugefügt und automatisch im DataGrid angezeigt
    }

    BindingList<Test> list = new BindingList<Test>();
}

internal class Test:INotifyPropertyChanged
{
    public Test(string a, string b)
    {
        this.a = a;
        this.b = b;
    }

    private string a;
    public string A
    {
        get { return a; }
        set 
        {
            if (a != value)
            {
                a = value;
                OnPropertyChanged("A");
            }
        }
    }

    private string b;
    public string B
    {
        get { return b; }
        set 
        {
            if (b != value)
            {
                b = value;
                OnPropertyChanged("B");
            }
        }
    }


    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    }

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, e);
    }

    #endregion
}

Schnittstelle INotifyPropertyChanged damit DataGrid Änderungen bei den Eigenschaften mitbekommt, funktioniert meineswissen nur in Verbindung mit BindingList

Ansonsten müsste eigentlich alles selbsterklärend sein.
 
Zuletzt bearbeitet:
Hey Spyke,

erstmal vielen Dank für die Mühe, die Du Dir gemacht hast! Habe das mal ausprobiert, ist aber irgendwie nicht ganz das was ich gesucht habe. Ich hab das Problem jetzt umgegangen und anders gelöst. Trotzdem aber nochmals vielen Dank! ;-)

Beste Grüsse,
Guido
 

Neue Beiträge

Zurück