Avatar billede signori Nybegynder
31. marts 2005 - 11:23 Der er 10 kommentarer og
2 løsninger

Hvordan gør jeg DataGrid / ADO.Net objektorienteret

Hej,

gennem mit studie programmerede jeg Java. Her arbejdede vi med view-controller-model filosofien. Jeg forklarer med et lille eksempel:

Jeg har 3 klasser:
GUICustomer
ControllerCustomer
Customer

Brugeren trykker på knappen "hent alle kunder" og dette event kalder metoden ControllerCustomer.hentKunder().
ControllerCustomer.hentKunder() laver select * from customer i databasen og genererer et Customer array. ControllerCustomer kalder metoden GUICustomer.setCustomers(Customer[]) som sørger for at kunder bliver vist i GUI'en.

Så langt så godt.

Hvis man kigger på C# / ADO.net kan jeg lave det samme med en DataReader. Men der er jo også alternativet DataGrid. Umiddelbart synes jeg dog at den objekt orienterede tankegang ryger en smule idet man ikke her vil arbejde med objektet Customer, men arbejde direkte i DataGrid og opdatere databasen ved hjælp af DataGrids metoder. Er det korrekt forstået eller er det mig der misforstår noget.
Avatar billede arne_v Ekspert
31. marts 2005 - 11:27 #1
DataGrid er vel perfekt objekt orienteret.

Jeg formoder at du tænker på MVC.

Du kan sige at DataGrid har indbygget både M og V.
Avatar billede signori Nybegynder
31. marts 2005 - 11:32 #2
Det er MVC jeg tænker på. Men hvor kommer M ind i billedet. Det er sikkert min forståelse der er noget galt med men når jeg bruger DataGrid bruger jeg en DataAdapter, fylder et untyped DataSet og binder dette til min grid. Hvis vi bruger eksemplet fra før så mister jeg vel model klassen Customer, idet man bare ændrer i griden.
Avatar billede burningice Nybegynder
31. marts 2005 - 11:51 #3
din model er vel i dette tilfælde dit dataset.
Avatar billede signori Nybegynder
31. marts 2005 - 11:54 #4
Ja den er jeg med på, men med udgangspunkt i mit ovenstående eksempel, bliver der ikke behov for modelklassen Customer. Og så går man vel på kompromis med den objekt orienterede tankegang - at modellere objekter der kan relateres til virkeligheden.
Avatar billede burningice Nybegynder
31. marts 2005 - 11:58 #5
det er rigtig nok.. men så kan du jo lave et typed dataset, eller binde en Customer-collection til dit datagrid. Ingen siger du SKAL bruge et dataset, selvom det det da nok er det der fungerer bedst.
Avatar billede signori Nybegynder
31. marts 2005 - 12:03 #6
Typed dataset -> er det ikke baseret på tabellen og ikke en model klasse

Customer collection -> så mister jeg vel en del af DataGrid funktionaliteten eller hvad? jeg tænker her på oprettelse af nye kunder og ligeledes opdateringer mv.

Jeg siger ikke at modellaget SKAL være baseret på klassen customer, men vil bare gerne vide om tanken med datagrid er at man dropper klassen der modellerer virkeligheden og istedet tilgår disse data direkte via DataGrid/DataSet.
Avatar billede arne_v Ekspert
31. marts 2005 - 12:14 #7
DataGrid er noget som gør det nemt at få en rimelig pæn funktionalitet
med meget lidt kode.

Og det har man så gjordt ved at bundle M og V (og måske også lidt C) i
en komponent.

Den er uden tvivl fuld MVC internt.

Men den passer måske ikke perfekt sammen med din MVC.

Du må kunne vælge forskellige strategier:

1)  droppe DataGrid og selv skrive en masse kode

2)  ignorerer det æstetiske problem fordi det virker fint

3)  prøve at hive M ud af DataGrid (jeg har ingen anelse om hvor meget man kan,
    men cf mener at der er visse muligheder i f.eks. custom collection)
Avatar billede burningice Nybegynder
31. marts 2005 - 12:14 #8
et typed dataset er lidt en blanding mellem et normalt dataset og så din customer-klasse. Du har mulighed for at definere hvilke typer de enkelte kulonner skal være, og implemetere kunde-relaterede metoder. I bund og grund er det dog ikke andet end en klasse der nedarver fra Dataset-klassen.

Det er rigtigt at Datagriddet har rigtig mange dejlige funktioner, men de er næsten alle mindet på brugen af Dataset/Datatable/Dataview. Det er svært at lave et så stort og genenmført komponent som datagriddet er hvis man ikke ved hvilken datastruktur den skal basere sig på. Jeg synes da det er fint at man også kan bruge almindelige IList-objecter som objecter, men så mister man rigtig nok noget af funktionaliteten.

Men så slemt er det nu heller ikke. Du kan sagtens udvide datagriddet til at understøtte oprettelse og opdatering af dine egne objecter. Det er ikke værre end at subclasse datagriddet og evt. metoder den måtte bruge.
Avatar billede burningice Nybegynder
31. marts 2005 - 12:15 #9
der skulle stå

kan bruge almindelige IList-objecter som "datasource"
Avatar billede signori Nybegynder
31. marts 2005 - 12:30 #10
Ok. Jeg bliver lidt klogere. Konklutionen må være - Brug DataGrid og drop den "rene" MVC hvad denne del angår. Alternativ kan man lave noget med en Collection, men det fjerner en del funktionalitet fra DataGrid.

Smider i et par svar.
Avatar billede burningice Nybegynder
31. marts 2005 - 12:37 #11
svar
Avatar billede arne_v Ekspert
31. marts 2005 - 12:37 #12
.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester