[ASP.NET] Gridview koppelen aan ObjectDataSource *

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Beste tweakers,

Ik ben nu al een uurtje aan het googelelen maar ik kom er niet echt uit:

Ik heb een gridview, deze vul ik door de volgende code uit te voeren:

C#:
1
2
3
4
DataTable data = geefdataTableterug();

gvRecommendations.datasource = data;
gvRecommendations.dataBind();


Nu werkt dit perfect. Alleen wil het updaten van me database niet lukken. De gridview bevat namelijk onderandere een checkbox die wel of niet checked is. Het liefste wil ik gewoon zeggen na het drukken op de knop save.
C#:
1
DataTable data = gvRecommendations.datasource;


Maar dat kan natuurlijk niet zo makkelijk.
Maar hoe kan ik dit ongeveer wel doen?

Als ik immers gebruik maak van die datasourcecontrols, krijg ik gemekker dat hij de kolom displayname niet kan updaten. Dit klopt helemaal want deze komt uit een andere tabel dan die moet worden geupdate. (De dataTable is immers een join). Bovendien vind ik het onwijs goor om per row eerst op edit te drukken en vervolgens op update (Lekker gebruiksvriendelijk).

Hoe kan ik dat nou een beetje goed oplossen?

Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 08:50
Kijk eens naar een ObjectDataSource, die kan two-way binding verzorgen. Geef in je select aan dat je de functie geefdataTableTerug() wilt gebruiken, en in je Update maak je een nieuwe functie die een record van je type weer kan verwerken (en persisten).

Moet je in je save ObjectDataSource.Update() aanroepen.

Voor je checkbox gebruik je dan code ala <asp:Checkbox id="checkbox1" runat='server' Selected='<%#Bind("GeselecteerdProperty")%>' />


-edit: mocht je data al uit sql moeten komen, gebruik dan gewoon de SqlDataSource, en als je toch business entities wilt verzorgen, poep dan gewoon een mooie List<T> uit en niet casten naar een DataTable-

[ Voor 18% gewijzigd door creator1988 op 26-05-2009 16:53 ]


Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Oke even de info op msdn erover gelezen en dat ding is idd precies wat ik wil hebben, nu nog de implementatie.

Ik heb nu een nieuw ObjectDatasource aangemaakt, en de select en update functies ingesteld. Select werkt vanaf begin al helemaal perfect, dus daar ben ik zeer tevreden over, alleen nu nog het updaten.

Ik heb onder me save knop een functie gepropt die ObjectDataSource1.update(); aanroept, echter gebeurd er weinig. De verwerk functie wordt wel aangeroepen, alleen slaat hij geen wijzigen op lijkt me.

Ik vermoed dat het komt doordat hij voor het update gebind wordt en dus de wijzigen al verloren gaan?

Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 08:50
Probeer het zo eens:

code:
1
2
        for (int i = 0; i < gv1.Rows.Count; i++)
            gv1.UpdateRow(i, false);


Dus de update doen vanaf de gridview ipv de datasource, dit werkt sowieso.

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Oke dat heb ik gedaan en nu zie ik ook dat hij netjes het aantal keer mijn functie aanroept zoals het aantal rijen.
Daarvoor was het altijd maar 1x, ongeacht het aantal wijzigingen.

Nu heb ik ook even de parameters laten uitprinten om te kijken wat die teruggeven. (Ik geef de primary key mee van het object en de waarde wat gewijzigd zou moeten worden).

In alle gevallen is de primary key: 0 en waarde: false (Terwijl het soms true moet zijn en de key natuurlijk geen 0 ).Dus ik zoeken, kwam ik bij updateparameters uit: De primary key moet uit de ObjectDataSource komen en de waarde (visible) moet van een checkbox komen.

Mijn update parameters zien er nu zo uit:

code:
1
2
3
4
        <UpdateParameters>
            <asp:Parameter Name="recommendation_id" Type="Int32" />
            <asp:ControlParameter Name="visible" Type="Boolean" ControlID="CheckBox1"/>
        </UpdateParameters>


Hij gaat op ze mond omdat hij CheckBox1 niet kan vinden, terwijl deze aanwezig is. Als ik deze dan even omzet naar de objectDataSource visible kolom, krijg ik dus die 0 en false.

wat vergeet ik nu?

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 14:11

Haan

dotnetter

Heet je CheckBox wel CheckBox1 en niet bijv. checkbox1? Anders moet je eens kijken naar ClientID.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Dat van die Checkbox heb ik ondertussen opgelost:

Ik moest geen <% #Eval("visible")%> maar <% #Bound("visible")%> gebruiken.

Alleen krijg ik bij me primary key nog steeds 0 terug...

Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 08:50
Je moet om een of andere reden ook je primary key binden naar een object. Dit kan gewoon een hiddenfield zijn.

Als in: <asp:HiddenField id="hid1" runat='server' value='<%#Bind("ID")%>' />

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
creator je bent een topper!! Het werkt nu perfect! :) Bedankt voor het uitleggen en het geduld!
Pagina: 1