2009-07-15 10 views
16

J'ai un ASP: GridView qui contient un ASP: TextBox dans un TemplateField. Je voudrais obtenir son identifiant pour une utilisation en javascript. Quelque chose comme ceci:Comment trouver l'ID client du contrôle dans un GridView ASP.NET?

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:TextBox ID="textDateSent" runat="server" /> 
     <input type="button" value='Today' 
      onclick="setToday('<%# textDateSent.ClientID %>');" /> 
    </ItemTemplate> 
</asp:TemplateField> 

Mais quand je compile, je reçois une erreur:

The name 'textDateSent' does not exist in the current context

Quelqu'un sait comment obtenir l'ID client de cette zone de texte?

Répondre

30

Essayez ceci:

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:TextBox ID="textDateSent" runat="server"> 
     </asp:TextBox>      
     <input type="button" value='Today' onclick="setToday('<%# ((GridViewRow)Container).FindControl("textDateSent").ClientID %>');" /> 
    </ItemTemplate> 
</asp:TemplateField> 
+0

+1 Très bien! Court et doux. –

+0

+1 Superbe solution. Certainement beaucoup de codage. – suryakiran

+0

Salut 'Chris' selon votre J'ai fait ce qui suit dans mon code, mais incapable de retourner la valeur que nécessaire' curTexbox.Attributes.Add ("onBlur", "retour multiplication ('" + curTexbox.ClientID + "', '" + curTexbox1.ClientID + "',' <% # (conteneur (GridViewRow)) .FindControl (txtAmount).ClientID%> ') ")' pouvez-vous corriger si je me trompe – Dotnet

1

Remplacez <%# textDateSent.ClientID %> par <%= textDateSent.ClientID %>. Argh, il se peut que vous deviez utiliser l'événement OnDataBinding de la vue de la grille. Ensuite, mettez un contrôle littéral dans votre javascript. Ensuite, vous pouvez obtenir le clientID de la zone de texte et l'introduire dans votre contrôle littéral.

protected void GridViewName_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      //Create an instance of the datarow 
      DataRowView rowData = (DataRowView)e.Row.DataItem; 

      //locate your text box 
      //locate your literal control 
      //insert the clientID of the textbox into the literal control 
     } 
    } 

Regardez ici pour un great detailed tutorial à travailler dans ce contexte.

+0

qui ne fonctionne pas non plus. – Keltex

+0

Boy ... ne serait pas la communication directe avec l'affiche de la question soit tellement plus facile! : P Vérifiez ma mise à jour. –

+1

voté parce que cela fonctionne, mais je préfère la réponse de Chris parce que ce n'est pas fait en code-behind. – Keltex

2

Peut-être que vous ne voulez pas le faire où vous avez besoin du ClientID. Découvrez ce poste here où les contrôles d'une ligne sont référencés de manière générique.

1

Vous pouvez obtenir votre numéro de client comme ceci:

protected void Gv_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     string strClientID = ((TextBox)e.Row.FindControl("txtName")).ClientID; 
    } 
} 

Cela donnera ID client unique pour chaque zone de texte dans toutes les lignes.

1

Je fais juste ça ...

var tbl = document.getElementById('<%=GridView.ClientID%>'); 
var checkBox = tbl.rows[i].cells[11].getElementsByTagName("input")[0].id; 

la cellule doit toujours être le même et il se rendu dans une entrée. Vous devrez peut-être changer le numéro à la fin si vous avez plus d'une entrée dans cette cellule. Cela vous donnera le nouveau clientid/id de l'objet d'entrée (case à cocher ou autre)

+0

Clair et simple. –

0

C'est ce que j'ai fait. Dans la page aspx je viens de passer l'objet entier à la fonction javascript, donc je n'ai même pas menti à l'id du client. Dans mon cas, l'objet était une liste déroulante dans le EditItemTemplate de GridView. J'ai ajouté un événement html onchange (this) dans le code aspx.

<asp:DropDownList ID="custReqRegionsDDL" runat="server" onchange='custReqRegionsDDLOnChange(this)'> </asp:DropDownList>

ici est mon javascript

function custReqRegionsDDLOnChange(myDDL) 
    { 
     alert('selected text=' + myDDL.options[myDDL.selectedIndex].text); 

}

Questions connexes