[ASP.Net 2.0] GridView - verkrijgen textbox waarde

Pagina: 1
Acties:

  • NorthernLight
  • Registratie: November 2006
  • Laatst online: 19-11 13:02
Hoi,

Ik zit met het volgende probleem:
Ik heb een gridview met daarin een TemplateField. Het TemplateField bevat een itemtemplate met daarin een TextBox en een Button.
Als er op de Button geklikt wordt wil ik de waarde van de TextBox uit kunnen lezen. Alleen: Hoe kom ik bij de betreffende TextBox? Ik weet het id van de textbox (deze is gezet in gvAfsprFunctie_RowDataBound en wordt via het commandId van de button doorgegeven), alleen lukt het me niet om met FindControl de TextBox te verkrijgen.

Hieronder de (design)code (ik heb alle overbodige meuk er even uit gesloopt):
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
<asp:GridView ID="gvAfsprFunctie" runat="server" OnRowDataBound="gvAfsprFunctie_RowDataBound">                    
  <Columns>          
    <asp:BoundField DataField="Id" HeaderText="" Visible="false"/>          
    <asp:TemplateField >
      <ItemTemplate>
        Voortgang<br />
        <asp:TextBox runat="server" ID='tbVoortgang' CssClass="inputTextbox" Rows="2" Columns="40" TextMode="MultiLine"/>&nbsp;
        <asp:Button CommandName="AfpraakFunctie" CommandArgument='<%# Bind("Id") %>' ID="btnSaveVoortgang" runat="server" CssClass="InputButton" Text="Opslaan" OnClick="btnSaveVoortgang_Click"/>
      </ItemTemplate>
    </asp:TemplateField>
  </Columns>                        
</asp:GridView>


De code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
protected void btnSaveVoortgang_Click(object sender, EventArgs e)
{
  //Cast the sender to a button
  Button saveVoortgangButton = (Button)sender;    

  //Get values    
  String commandType = saveVoortgangButton.CommandName.ToString();
  String commandId = saveVoortgangButton.CommandArgument.ToString();

  TextBox voortgang = (TextBox)gvAfsprFunctie.FindControl("tbVoortgang_" + commandId);
  String test = "gevonden: " + voortgang.Id;
}

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 14:04

TeeDee

CQB 241

Het ID van je Textbox is toch tbVoortgang? Waarom roep je dan tbVoortgang_ aan?
Verder zou je ook tijdens het Debuggen kunnen kijken wat er allemaal in je control collection zit.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:48

gorgi_19

Kruimeltjes zijn weer op :9

Je moet wel nog de juiste row pakken waarop je findcontrol moet loslaten.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • NorthernLight
  • Registratie: November 2006
  • Laatst online: 19-11 13:02
TeeDee schreef op woensdag 07 februari 2007 @ 11:10:
Het ID van je Textbox is toch tbVoortgang? Waarom roep je dan tbVoortgang_ aan?
Verder zou je ook tijdens het Debuggen kunnen kijken wat er allemaal in je control collection zit.
Nee dat is even de tijdelijke id die ik er aan geef. Per record is er vervolgens weer een textbox, die een uniek id moet hebben (en ook krijgt in gvAfsprFunctie_RowDataBound).

  • NorthernLight
  • Registratie: November 2006
  • Laatst online: 19-11 13:02
gorgi_19 schreef op woensdag 07 februari 2007 @ 11:10:
Je moet wel nog de juiste row pakken waarop je findcontrol moet loslaten.
Mmhhh... Alleen heb ik niet de beschikking over de geselecteerde rij in
protected void btnSaveVoortgang_Click(object sender, EventArgs e)

:(

  • NorthernLight
  • Registratie: November 2006
  • Laatst online: 19-11 13:02
Goed... Ik kom er zojuist achter dat het erop lijkt dat de id's van de textboxes helemaal niet veranderd zijn.
Ik doe dit bij gvAfsprFunctie_RowDataBound
C#:
1
2
3
4
5
6
7
8
      //Get the afspraak id
      Int32 afspraakId = (Int32)DataBinder.Eval(dataItem, "Id");
      
      //Set the id of the textbox
      voortgang.ID = "tbVoortgang_" + afspraakId.ToString();

     //Display own id it in the textbox
      voortgang.Text = "mijn id: " + voortgang.ID;

Hij geeft dan netjes in zichzelf weer wat zijn (unieke) id is. Dus dat lijkt te werken, maarrrrrr......

.... als ik bij btnSaveVoortgang_Click door de gvAfsprFunctie.Rows loop met onderstaande code
C#:
1
2
3
4
5
6
7
8
foreach (GridViewRow row in gvAfsprFunctie.Rows)
    {      
      voortgang = (TextBox)row.Cells[5].Controls[3];// FindControl("tbVoortgang_" + commandId);
      if (voortgang != null)
      {
        test += "<br/>gevonden: " + voortgang.ID;
      }
    }

krijg ik dit terug:
gevonden: tbVoortgang
gevonden: tbVoortgang
gevonden: tbVoortgang

Dus is het ook niet zo raar dat FindControl niet werkt.... :/

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 14:04

TeeDee

CQB 241

Dat zei ik toch ;)

De ranzige manier zou kunnen zijn: Request.Form gebruiken. Door in de gegenereerde code het juiste ClientId op te zoeken zou je dan het e.e.a. uit kunnen lezen. Of je er vervolgens nog wat mee kan doen durf ik niet te zeggen.

Maar met de code die je nu hebt kan je natuurlijk al heeeeel ver komen. Alleen met FindControl("tbVoortgang") op de juiste row en je bent er al bijna.

[ Voor 8% gewijzigd door TeeDee op 07-02-2007 11:51 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • NorthernLight
  • Registratie: November 2006
  • Laatst online: 19-11 13:02
TeeDee schreef op woensdag 07 februari 2007 @ 11:50:
Dat zei ik toch ;)

De ranzige manier zou kunnen zijn: Request.Form gebruiken. Door in de gegenereerde code het juiste ClientId op te zoeken zou je dan het e.e.a. uit kunnen lezen. Of je er vervolgens nog wat mee kan doen durf ik niet te zeggen.

Maar met de code die je nu hebt kan je natuurlijk al heeeeel ver komen. Alleen met FindControl("tbVoortgang") op de juiste row en je bent er al bijna.
Alleen hoe kom ik aan de juiste row? :'(

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:48

gorgi_19

Kruimeltjes zijn weer op :9

NorthernLight schreef op woensdag 07 februari 2007 @ 11:52:
[...]

Alleen hoe kom ik aan de juiste row? :'(
Rows Collectie benaderen van een gridview?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • NorthernLight
  • Registratie: November 2006
  • Laatst online: 19-11 13:02
gorgi_19 schreef op woensdag 07 februari 2007 @ 11:58:
[...]

Rows Collectie benaderen van een gridview?
:)
Zie mijn eerdere post met "als ik bij btnSaveVoortgang_Click door de gvAfsprFunctie.Rows loop met onderstaande code"...
Zo kom ik wel door de rows, maar weet nog steeds niet of het de juiste textbox is, aangezien ik geen uniek id heb om te vergelijken... :|

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 14:04

TeeDee

CQB 241

Even uit mijn hoofd, maar volgens mij ben jij op zoek naar het RowCommand event.

http://msdn2.microsoft.co....gridview.rowcommand.aspx

Waarbij deze
C#:
1
2
3
4
      int index = Convert.ToInt32(e.CommandArgument);           
      // Retrieve the row that contains the button clicked 
      // by the user from the Rows collection.
      GridViewRow row = CustomersGridView.Rows[index];
doen wat jij wilt.

[ Voor 48% gewijzigd door TeeDee op 07-02-2007 12:57 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:48

gorgi_19

Kruimeltjes zijn weer op :9

NorthernLight schreef op woensdag 07 februari 2007 @ 12:50:
[...]

:)
Zie mijn eerdere post met "als ik bij btnSaveVoortgang_Click door de gvAfsprFunctie.Rows loop met onderstaande code"...
Zo kom ik wel door de rows, maar weet nog steeds niet of het de juiste textbox is, aangezien ik geen uniek id heb om te vergelijken... :|
Dan geef je in de CommandArgument van je button van die rij het betreffende rowindex mee :)

Wellicht kan je zelfs parent van de parent van de parent van sender (of iets in die trant :+) nement, waardoor je een reference krijgt naar de betreffende tablerow. Daar kan je dan FindControl op loslaten.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • NorthernLight
  • Registratie: November 2006
  • Laatst online: 19-11 13:02
Teedee & gorgi_19 beide bedankt: Met de suggesties uit de laatste 2 posts ben ik er uit gekomen, super!
Pagina: 1