[asp.net 2.0] Gridview dropdownlijst in edititemtemplate

Pagina: 1
Acties:

  • xos
  • Registratie: Januari 2002
  • Laatst online: 25-11 17:08
Hoi iedereen,

ik ben bezig om een gridview wat gebruikersvriendelijker te maken door een gebruiker een dropdownbox voor te schotelen tijdens het aanpassen van een rij in de gridview. Alleen lukt het me niet...

Ik heb een gridview (ID="GridView1") opgenomen in mijn pagina. Daarin het veld "actief" als templatefield opgenomen.

C#:
1
2
3
4
5
6
7
8
9
10
11
<asp:TemplateField HeaderText="actief" SortExpression="actief">
                    <EditItemTemplate>
                        <asp:DropDownList ID="edit_actiefdropdownlist" DataTextField="actief" runat="server">
                            <asp:ListItem Text="Ja" Value="J" />
                            <asp:ListItem Text="Nee" Value="N" />
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("actief") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>


Wat ik nu graag is dat wanneer een gebruiker besluit een record te wijzigen dat er een dropdownlijst wordt gebruikt om aan te geven of het record nog actief is. Hiervoor gebruik ik 2 events van de gridview.

Ten eerste een event om een geselecteerde waarde uit de dropdownlijst te gebruiken als waarde bij het updaten van het record:
C#:
1
2
3
4
5
6
7
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow gvr = GridView1.Rows[GridView1.EditIndex];

        DropDownList ddl = (DropDownList)gvr.Cells[4].FindControl("edit_actiefdropdownlist");
        e.NewValues["actief"] = ddl.SelectedValue;
    }

Dit werkt prima. De volgende stap is de dropdownlijst een geselecteerde waarde te geven welke afhankelijk is van het veld "actief". En hier loop ik spaak. Ik ben tot de volgende code gekomen:

C#:
1
2
3
4
5
6
7
8
9
if ((e.Row.RowState == DataControlRowState.Edit) ||
             (e.Row.RowState == DataControlRowState.Edit | e.Row.RowState == DataControlRowState.Alternate))
        {
            DataRowView drv = (DataRowView)e.Row.DataItem;
            DropDownList ddl = (DropDownList)e.Row.Cells[4].FindControl("edit_actiefdropdownlist");

            ListItem li = ddl.Items.FindByValue(drv["actief"].ToString());
            li.Selected = true;
        }


Het probleem is nu dat ik de dropdownlijst niet terug kan vinden met findcontrol. De variable ddl blijft een nullpointer. Iemand een idee hoe ik wel een referentie kan krijgen naar die dropdownlijst?

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:27

mulder

ik spuug op het trottoir

Het selecteren van je juiste waarde zou die automagisch moeten doen?

oogjes open, snaveltjes dicht


  • xos
  • Registratie: Januari 2002
  • Laatst online: 25-11 17:08
Volgens mij niet. Ik zie niet hoe dat automatisch zou moeten kunnen?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:29

gorgi_19

Kruimeltjes zijn weer op :9

Waarom verwacht je een dropdownlist bij een rowstate van DataControlRowState.Alternate, aangezien deze alleen bij DataControlRowState.Edit neergezet wordt?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:27

mulder

ik spuug op het trottoir

Ik dacht dat dat wel door het grid zou worden gedaan ;) Volgens mij moet je die FindControl gewoon op het Row object zelf doen, dus: e.Row.FindControl(), hier staat wel meer uitleg: http://weblogs.asp.net/hp...ve/2006/02/02/437158.aspx, voorbeeldje in het wonderschone VB.Net ;)

oogjes open, snaveltjes dicht


  • xos
  • Registratie: Januari 2002
  • Laatst online: 25-11 17:08
gorgi_19 schreef op dinsdag 23 januari 2007 @ 21:25:
Waarom verwacht je een dropdownlist bij een rowstate van DataControlRowState.Alternate, aangezien deze alleen bij DataControlRowState.Edit neergezet wordt?
Je hebt gelijk, het werkt nu. Ik moet bekennen dat ik eigenlijk pas 3 dagen serieus bezig ben met asp.net via een boek en online tutorials. En dit stukje code komt letterlijk uit het boek, dit geeft iig hoop voor de volgende hoofdstukken. Ik heb wel een idee wat er bedoelt wordt met DataControlRowState.Edit alleen wat er bedoelt wordt met "Alternate state" is me een raadsel :$. Daarom heb ik daar maar niks aan veranderd en aangenomen dat dat stuk goed was. Maar je opmerking klinkt achteraf erg logisch...

Iig bedankt!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:29

gorgi_19

Kruimeltjes zijn weer op :9

Afaik moet je ook in de controlcollection van een cell moeten kunnen zoeken, aangezien e.row.cells(4).controls(0) ook werkt om een referentie naar een control te krijgen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:29

gorgi_19

Kruimeltjes zijn weer op :9

xos schreef op dinsdag 23 januari 2007 @ 21:57:
[...]


Je hebt gelijk, het werkt nu. Ik moet bekennen dat ik eigenlijk pas 3 dagen serieus bezig ben met asp.net via een boek en online tutorials. En dit stukje code komt letterlijk uit het boek, dit geeft iig hoop voor de volgende hoofdstukken. Ik heb wel een idee wat er bedoelt wordt met DataControlRowState.Edit alleen wat er bedoelt wordt met "Alternate state" is me een raadsel :$. Daarom heb ik daar maar niks aan veranderd en aangenomen dat dat stuk goed was. Maar je opmerking klinkt achteraf erg logisch...

Iig bedankt!
Als ze het principe van een datagrid hebben overgenomen, zal het de even / oneven rij zijn.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • xos
  • Registratie: Januari 2002
  • Laatst online: 25-11 17:08
Mja, dat was ook mijn eerste gedachte. Maar ik kon dat totaal niet plaatsen in het voorbeeld, je wilt dit zowel bij de even als de oneven rijen hebben. Dus ik nam aan dat die Alternate state op iets anders sloeg, waarom zit het er anders in.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:29

gorgi_19

Kruimeltjes zijn weer op :9

xos schreef op dinsdag 23 januari 2007 @ 22:24:
Mja, dat was ook mijn eerste gedachte. Maar ik kon dat totaal niet plaatsen in het voorbeeld, je wilt dit zowel bij de even als de oneven rijen hebben. Dus ik nam aan dat die Alternate state op iets anders sloeg, waarom zit het er anders in.
Bij editing wellicht wel, maar je hebt anders nog wel te maken met bijvoorbeeld een verschillende stylesheet class voor een even / oneven rij.

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1