[ASP.NET 2.0/C#] Findcontrol in Detailsview edit werkt niet

Pagina: 1
Acties:
  • 679 views sinds 30-01-2008
  • Reageer

  • Hark_k
  • Registratie: September 2002
  • Laatst online: 01-12 13:26
Beste tweakers,

Ik ben bezig met een soort vacaturebank. Werkgevers kunnen hun eigen vacatures zien middels een Gridview, en bewerken middels een DetailsView. Ik wil echter een aantal bewerkingen doen op te bewerken velden, waardoor ik een instantie wil maken van de desbetreffende velden m.b.t. de Findcontrol() functie. Dit levert in edit-mode steevast null op, zowel in de Page_Load als in de PreRender. Met de defaultmode op Insert gaat het wel goed.

Ik heb het probleem geisoleerd tot de volgende code:

Web Form:
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<asp:DetailsView ID="dvVacature" DataKeyNames="vacatureid" runat="server" dataSourceID="dsVacature" DefaultMode="Edit" AutoGenerateRows="False" OnPreRender="onPreRender">
         <Fields>
            <asp:BoundField DataField="vacatureid" HeaderText="Vacaturenr." ReadOnly="True" />

            <asp:TemplateField HeaderText="Titel:" HeaderStyle-VerticalAlign="top">
                <EditItemTemplate>
                    <asp:TextBox ID="tbTitel" runat="server" Columns="45" Text='<%# Bind("Titel") %>' />
                    <asp:RequiredFieldValidator ID="reqValTitel" runat="server" ControlToValidate="tbTitel" Display="Dynamic" Text="<br/>Geeft uw vacature een titel" />
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="tbTitel" runat="server" Columns="45" Text='<%# Bind("Titel") %>' />
                    <asp:RequiredFieldValidator ID="reqValTitel" runat="server" ControlToValidate="tbTitel" Display="Dynamic" Text="<br/>Geeft uw vacature een titel" />
                </InsertItemTemplate>
            </asp:TemplateField>
            
            <asp:TemplateField HeaderText="Vacaturetekst:" HeaderStyle-VerticalAlign="top">
                <EditItemTemplate>
                    <asp:TextBox ID="tbVacaturetekst" runat="server" Columns="45" Rows="15" Text='<%# Bind("vacaturetekst") %>'
                        TextMode="MultiLine" />
                     <asp:RequiredFieldValidator ID="reqValVacaturetekst" runat="server" ControlToValidate="tbVacaturetekst" Display="Dynamic" Text="<br/>Beschijf uw vacature" />
                </EditItemTemplate>
            </asp:TemplateField>

            <asp:CommandField ShowEditButton="True" EditText="Opslaan" CancelText="Annuleren" ShowInsertButton="true" InsertText="Vacature plaatsen" />
        </Fields>
    </asp:DetailsView>


Codebehind:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    
    TextBox _tbVacaturetekst;

    protected void Page_Load(object sender, EventArgs e)
    {

        TextBox Titel = (TextBox)dvVacature.FindControl("tbTitel");
        //Waarom is Titel hier null?
    }

    protected void onPreRender(object sender, EventArgs e)
    {
        _tbVacaturetekst = (TextBox)dvVacature.FindControl("tbVacaturetekst");
        //Waarom is _tbVacaturetekst hier null?

        dsVacature.SelectParameters["Username"].DefaultValue = User.Identity.Name;
    } 


De textboxes worden wel gevuld met de gegevens uit de database, dus dat werkt prima. Waarom kan ik echter geen instatie maken van tbVacaturetekst en tbTitel?

Alvast bedankt, m'n bloeddruk stijgt al enige tijd van frustratie ;)

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Als ik het goed begrijp wil je, als je een row in je grid wilt editten, de value van een bepaalde TextBox ophalen ?
Doe je dit dan niet beter in de RowEditing ?

https://fgheysels.github.io/


  • Mephix
  • Registratie: Augustus 2001
  • Laatst online: 25-11 20:41
Volgens mij is je Findcontrol nothing (null) omdat je nog geen rows hebt ?

Findcontrol kun je alleen uitvoeren op een row, aangezien de rows bepalen of en zoja hoeveel van die textboxes aangemaakt worden.

Dus.. eerst een databind of iets dergelijks uitvoeren, dan findcontrol gebruiken op een row.

  • Hark_k
  • Registratie: September 2002
  • Laatst online: 01-12 13:26
Mephix schreef op maandag 04 juni 2007 @ 21:16:
Volgens mij is je Findcontrol nothing (null) omdat je nog geen rows hebt ?

Findcontrol kun je alleen uitvoeren op een row, aangezien de rows bepalen of en zoja hoeveel van die textboxes aangemaakt worden.

Dus.. eerst een databind of iets dergelijks uitvoeren, dan findcontrol gebruiken op een row.
Aha! :)

Ik doe eerst een Findcontrol, en ga dan pas de benodigde selectparameters aan de datasource toevoegen (regel 15 van codebehind). Logisch dat die row op dat moment nog niet bestaat. Met deze regel verplaatsen naar het begin van de Page_Load en een databind() lijkt het inderdaad te werken. Hartelijk dank _/-\o_