Anzahl an Zeilen in DataGridView (Binding?)



  • Hey,

    ich würde gerne die aktuelle Anzahl an Zeilen eines DataGridViews anzeigen lassen. Ich habe das zunächst so versucht:

    lblAnzArtikel.DataBindings.Add("Text", dgvUebersicht, "RowCount");
    

    Das funktioniert auf den ersten Blick auch hervorragend, aber wenn sich die Anzahl ändert, dann wird das nicht auf das Label übertragen...

    Wie mache ich es richtig?



  • Hast du INotifyPropertyChanged implementiert?

    pulic Class MeineKlasse: INotifyPropertyChanged
    {
        private string _MeinProperty;
        public string MeinProperty
        {
            get { _return _MeinProperty };
            set 
            {
                _MeinProperty = value;
                NotifyPropertyChanged("MeinProperty");
            }
        } 
        public event PropertyChangedEventHandler PropertyChanged;
    
        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
    
    }
    


  • DataGridView habe ich nicht selber geschrieben. Gehört zu den Standard-Controls.

    Kann dann wohl leider nichts dran ändern. 😞



  • Neine du sollst das in deiner klasse implementieren.
    Du hast bestimmt eine variable in der du die rowcount speicherst.
    und für dieses Attribut musst du dann NotifyPropertyChanged aufrufen,
    damit zb die Oberfläche auch die änderung mitbekommt, sonst zeigt dein Label
    immer dasselbe an.

    Vielleicht kannst du ja ein wenig mehr code zeigen.



  • Wie gesagt, die Variabel RowCount gehört zum DataGridView. Ich dachte, ich könnte einfach daran binden und würde so immer die Anzahl der Zeilen im DataGridVIew erhalten und könnte die durch Data Binding einfach an ein Label heften. Dem scheint aber leider nicht so zu sein.

    Mehr Code, der diese Sache betrifft habe ich nicht geschrieben.

    Ich verwende übrigens Windows Forms.



  • Hallo,

    wenn du auch beim DataGridView DataBinding verwendest (d.h. der DataSource eine IBindingList, ITypedList, ISourceList oder IList übergibst, z.B. DataSet, DataTable), dann kannst du dieselbe Datenquelle für dein eigenes DataBinding verwenden (und dann z.B. "Rows" bei einer DataTable verwenden), s.a. Binding-Klasse.

    Man kann einfach keine Controls an andere Controls binden, sondern immer nur an Daten(klassen).



  • Ja, das DataGridView wird auch über DataBinding befüllt.

    DataTable dt = ds.Tables["Lager"];
    
    lblAnzArtikel.DataBindings.Add("Text", dt, "Rows.Count");
    

    Liefert: System.ArgumentException: Die untergeordnete Liste für das Feld Rows kann nicht erstellt werden.

    DataTable dt = ds.Tables["Lager"];
    
    lblAnzArtikel.DataBindings.Add("Text", dt, "Rows");
    

    Liefert: System.ArgumentException: An die Eigenschaft oder Spalte Rows für die DataSource kann nicht gebunden werden.
    Parametername: dataMember

    Das haut also leider alles nicht hin oder habe ich dich falsch verstanden?



  • Habe den Zugriff darauf jetzt hinbekommen:

    lblAnzArtikel.DataBindings.Add("Text", dt.Rows, "Count");
    

    So konnte ich das zumindest in einem Teil meiens Programmes einbauen. Der andere Programmteil zeigt leider Daten an, die in Abhängigkeit zu einer anderen Tabelle stehen. Ich kann also nicht mehr einfach auf die Tabelle zugreiffen.

    Gibt es da einen Trick? Ein einfaches ds.Tables["Tabelle1.Relation"] scheint nicht möglich zu sein. Der Aufruf gibt null zurück.



  • Sorry, ich dachte man könnte direkt die Rows-Eigenschaft bei der DataTable benutzen (hatte es aber selber nicht ausprobiert), aber schön, daß du selbst die Lösung über dt.Rows und "Count" gefunden hast.
    Und ich denke bei den Relations wirst du denselben Weg gehen müssen, d.h. über die DataSet.Relations-Eigenschaft dir die passende DataTable raussuchen müssen (ChildTable bzw. ParentTable).



  • Ich hab es nun ganz anders gelöst. Ich zähle die Zeilen einfach selber. Das Data Binding scheint hier nicht korrekt zu funktionieren, da auch hier eine Änderung der Zeilen nicht an das andere Objekt gemeldet wird.


Log in to reply