Forums Neueste Beiträge
 

nochmal DataGrid

22/03/2008 - 12:03 von christian.tauschek | Report spam
Hallo Leute,
ich habe schon mal deshalb gepostet aber leider keine Anwtort
erhalten.
Ist wahrscheinlich eine Kleinigkeit, ich beschàftige mich damit aber
schon lange, da es wichtig ist für mich.

Damit weise ich meinem DataGrid Werte zu (beim Laden der Form)
DataGrid.Datasource = MeineArrayList

Löschen eines DatenSatzes im DataGrid tue ich mit
MeineArrayList.RemoveAt(IrgendeinIndex)

Nach dem Löschen aktualisiere ich das DataGrid wieder
'ist anscheinend notwendig, damit Änderungen auch angezeigt
werden
DataGrid.Datasource = new ArrayList()
DataGrid.Datasource = MeineArrayList 'das geànderte
ArrayList erneut zuweisen

komischerweise funktioniert das auch alles. Nur wenn ich die letzte
Zeile im Datagrid lösche, wird zwar das Datagrid wieder dargestellt
und die gelöschte Zeile ist auch weg.
Aber wenn man danach auf eine andere Zeile oder auf ein anderes
Control klickt, wird eine
Fehlermeldung ausgegeben:
"Der Index liegt außerhalb des gültigen Bereichs. möchten Sie den
Wert korrigieren"

Kann mir dabei jemand helfen? Wichtig ist mir aber, dass ich die
ArrayList weiter verwenden kann. (nicht ein Dataset oder Datatable)
Ich verwende VS2001.

Vielen Dank im Voraus für die Mühe
Christian Tauschek
 

Lesen sie die antworten

#1 Elmar Boye
22/03/2008 - 12:36 | Warnen spam
Hallo Cristian,

schrieb:
Damit weise ich meinem DataGrid Werte zu (beim Laden der Form)
DataGrid.Datasource = MeineArrayList

Löschen eines DatenSatzes im DataGrid tue ich mit
MeineArrayList.RemoveAt(IrgendeinIndex)

Nach dem Löschen aktualisiere ich das DataGrid wieder
'ist anscheinend notwendig, damit Änderungen auch angezeigt
werden
DataGrid.Datasource = new ArrayList()
DataGrid.Datasource = MeineArrayList 'das geànderte
ArrayList erneut zuweisen

komischerweise funktioniert das auch alles. Nur wenn ich die letzte
Zeile im Datagrid lösche, wird zwar das Datagrid wieder dargestellt
und die gelöschte Zeile ist auch weg.



Das Problem ist, dass das DataGrid von Deiner Listenànderung
nichts mitbekommt. Um die Änderung bei einer ArrayList dem
Datagrid bekanntzumachen geht eben nur das Neuzuweisen
bzw. (besser) CurrencyManager.Refresh, in etwa (ungetestet):
Dim cm as CurrencyManager = DirectCast( _
DataGrid.BindingContext(MeineArrayList, ""), _
CurrencyManager)
cm.Refresh()

Danach ist allerdings die ursprüngliche Position und
auch für alle andere Elemente ungültig.

Kann mir dabei jemand helfen? Wichtig ist mir aber, dass ich die
ArrayList weiter verwenden kann. (nicht ein Dataset oder Datatable)



Besser funktioniert, das nur wenn Du eine IBindingList
mit einem ListChanged Ereignis verwendest. Unter
http://groups.google.de/group/micro...904b4e6147
hatte ich mal ein Beispiel für VB.NET gepostet.
Dass könntest Du so anpassen, das es Deine ArrayList kapselst
Allerdings solltest Du dann möglichst alle Operationen darüber
erledigen und die ArrayList selbst nur wenn es unumgànglich ist
und sie nicht geàndert wird (denn sonst bist Du bald wie bei oben).

Gruß Elmar

Ähnliche fragen