Laden...

DataGridView lässt keine Änderungen zu

Erstellt von bhelbig vor 16 Jahren Letzter Beitrag vor 16 Jahren 973 Views
B
bhelbig Themenstarter:in
135 Beiträge seit 2006
vor 16 Jahren
DataGridView lässt keine Änderungen zu

Hi zusammen,

ich hab folgendes Problem: Ich habe eine List<T> als DataSource an mein DataGridView zugewiesen. Die Liste fülle ich vorher. Er zeigt mir im DataGridView auch wunderbar die Daten an, die ich vorher in die Liste per Code reingeschrieben habe. Jetzt will ich die Daten im Grid bearbeiten, geht soweit auch, aber sobald ich die Zelle in der ich gerade eine Änderung gemacht habe verlasse wird meine Änderung verworfen und der ursprüngliche Zustand wieder hergestellt.
Ich raff das nicht, ich habe dass doch so garnicht programmiert, woran liegt das?

Meine Liste wird erstellt:


List<TypeDef.PFieldUpList> lFieldUpList = new List<TypeDef.PFieldUpList>();
foreach (TypeDef.PFieldUpList pfList in pObject.FieldUpdates)
{                                    
lFieldUpList.Add(new TypeDef.PFieldUpList(pfList.Active, pfList.Database, 
                                                                              pfList.DBField, pfList.Content));
}

und an die DataSource gebunden:
// Assign Array to DataGridView on Page 'Dataimport'
_dgvDataFieldUpdate.DataSource = lFieldUpList;
_dgvDataFieldUpdate.Columns[0].DataPropertyName = "Active";
_dgvDataFieldUpdate.Columns[1].DataPropertyName = "DBField";
_dgvDataFieldUpdate.Columns[2].DataPropertyName = "Content";
_dgvDataFieldUpdate.Columns[3].DataPropertyName = "Database";



Meine Liste besteht aus folgendem Struct:

[SerializableAttribute]
public struct PFieldUpList
{
private Boolean blActive;
private String strDB, strDBField, strNewContent;

        public PFieldUpList(Boolean blActive, String strDB, String strDBField, String strNewContent)  
        {  
            this.blActive = blActive;  
            this.strDB = strDB;  
            this.strDBField = strDBField;  
            this.strNewContent = strNewContent;  
        }  

        public Boolean Active  
        {  
            get { return blActive; }  
            set { blActive = value; }  
        }  

        public String Database  
        {  
            get { return strDB; }  
            set { strDB = value; }  
        }  
        public String DBField  
        {  
            get { return strDBField; }  
            set { strDBField = value; }  
        }  
        public String Content  
        {  
            get { return strNewContent; }  
            set { strNewContent = value; }  
        }  
    }


Hoffe ihr habt eine Idee. Eine xception wird nämlich nicht geworfen und ich habe langsam keine Ahnung mehr voran es noch liegen könnte.

Grüße

Ben
830 Beiträge seit 2005
vor 16 Jahren

Hallo bhelbig,

ich kann dir nicht genau sagen warum, aber ändere den Typ von PFieldUpList in class anstatt struct. Dann funktioniert das.

Vermutung:
Ich gehe mal davon aus, dass das DGV mit Refelection arbeitet und für eine veränderte Row eine neue Instanz von PFieldUpList erzeugen will. Das geht aber nur mit einem Parameterlosen Konstruktor, welcher bei Struct nicht erlaubt ist. Also wird die "alte" Instanz ohne mekern beibehalten.

Sollte dies nicht stimmen und einer hat eine plausible Erklärung, wüßte ich diese auch gerne 🙂.

Anmerkung am Rande:
PFieldUpList ist kein guter Name, oder? Schliesslich handelt es sich hier ja nicht um eine Liste.

Gruss
Friedel

Ohne Ziel ist auch der Weg egal.

B
bhelbig Themenstarter:in
135 Beiträge seit 2006
vor 16 Jahren

Hi Friedel,

danke für die Erklärung. Damit kann ich zumindest mal was anfangen. Werde das mit der Klasse ausprobieren. Der Name bezieht sich nicht im eigentlichen Sinne aus List, sondern es ist schon eine Liste, nur eben eine verkettete 🙂

Grüße

Ben