2011-07-29 21 views
25

¿Cómo funciona el método FindControl si necesito encontrar Control que esté dentro de GridViewTemplate, más específicamente ItemTemplate?¿Cómo encontrar el control en TemplateField de GridView?

Tengo un hyperlink pero no puede encontrar lo mismo.

Pregunta actualizado con el código de

GridView Código es el siguiente:

<asp:GridView ID="grvYourOpportunities" runat="server" AllowPaging="True" AutoGenerateColumns="False" 
     DataKeyNames="ID#,B,H" PageSize="20" CellPadding="4" ForeColor="#333333" GridLines="Both" 
     OnRowDataBound="grvYourOpt_RowDataBound"> 
     <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
     <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
     <Columns> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        i 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("i") %> 
       </ItemTemplate> 
      </asp:TemplateField> 

      <asp:TemplateField> 
       <HeaderTemplate> 
        H 
       </HeaderTemplate> 
       <ItemTemplate> 

        <%--<a href="javascript:ShowChildGrid('div<%# Eval("ID#") %>');"> 
        <img id="imgdiv<%# Eval("ID#") %>" alt="Click" border="0" src="plus.gif" runat="server" /> </a> --%> 

        <asp:HyperLink runat="server" ID="hlPlus" ImageUrl="~/plus.gif"></asp:HyperLink> 

       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        B 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%--<%# Eval("B") %>--%> 
        <a href="javascript:ShowChildGridForBCol('div1<%# Eval("ID#") %>');"> 
         <img id="imgdiv1<%# Eval("ID#") %>" alt="Click here" border="0" src="tempY.png" /> 
        </a> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        ID.Nr. 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("ID#")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        Entry Date 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("Entry Date") %> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderStyle-Width="20px" ItemStyle-Width="20px"> 
       <HeaderTemplate> 
        BU 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("BU")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        BE 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("BE")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        Product Family 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("Product Family")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        Project Name 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("Project Name")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        SOP 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("SOP")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        Award Date 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("Award Date")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        Milestone Next Date 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("Milestone Next Date")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        Contract Status 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("Contract Status")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        Prob.Of Success 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("ProbSuccess")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        Key Account 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("Key Account")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        Sales SubRegion 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("Sales SubRegion")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        Growth 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("Growth")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        Sales p.a.OE mio$ 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("SalesOE")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        Sales p.a.AM mio$ 
       </HeaderTemplate> 
       <ItemTemplate> 
        <%# Eval("SalesAM")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <%--GridView 2, 3--%> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <tr> 
         <td align="left" style="margin-left: 10px;" colspan="5"> 
          <div id="div<%# Eval("ID#") %>" style="display: none; position: relative; left: 110px;"> 
           <asp:GridView ID="GridView2" runat="server" Width="40%" AutoGenerateColumns="false" 
            DataKeyNames="Entry Date" EmptyDataText="No orders for this customer." CellPadding="0" 
            ForeColor="#333333" GridLines="Both"> 
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
            <HeaderStyle CssClass="header" /> 
            <RowStyle CssClass="row" /> 
            <Columns> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("ID#")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("Entry Date") %> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("ID#")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField ItemStyle-Wrap="false"> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("Other Text") %> 
              </ItemTemplate> 
             </asp:TemplateField> 
            </Columns> 
           </asp:GridView> 
          </div> 
         </td> 
        </tr> 
        <tr> 
         <td align="left" colspan="19"> 
          <div id="div1<%# Eval("ID#") %>" style="display: none; position:relative; left: 110px;"> 
           <asp:GridView ID="GridView3" runat="server" AutoGenerateColumns="false" DataKeyNames="Entry Date" 
            EmptyDataText="No orders for this customer." CellPadding="0" ForeColor="#333333" 
            GridLines="Both" Width="100%"> 
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
            <%--<HeaderStyle CssClass="header" /> 
            <RowStyle CssClass="row" />--%> 
            <Columns> 

             <%--<asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
              </ItemTemplate> 
             </asp:TemplateField>--%> 

             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("ID#")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <%-- <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("Entry Date") %> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField HeaderStyle-Width="20px" ItemStyle-Width="20px"> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("BU")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("BE")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("Product Family")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("Project Name")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("SOP")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("Award Date")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("Milestone Next Date")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("Contract Status")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("ProbSuccess")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("Key Account")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("Sales SubRegion")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("Growth")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("SalesOE")%> 
              </ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField> 
              <HeaderTemplate> 
              </HeaderTemplate> 
              <ItemTemplate> 
               <%# Eval("SalesAM")%> 
              </ItemTemplate> 
             </asp:TemplateField>--%> 
            </Columns> 
           </asp:GridView> 
          </div> 
         </td> 
        </tr> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

El RowDataBound caso de que el padre es GridView de la siguiente manera;

Protected void grvYourOpt_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     string colId = grvYourOpportunities.DataKeys[e.Row.RowIndex].Values[0].ToString(); 
     string colB = grvYourOpportunities.DataKeys[e.Row.RowIndex].Values[1].ToString(); 
     string colH = grvYourOpportunities.DataKeys[e.Row.RowIndex].Values[2].ToString(); 

     #region "Commented Code for Col.B" 

     //if (colB == "Y") 
     //{ 
     // e.Row.Cells[2].Text = "<img src='tempY.png'>"; 

     //} 
     //else 
     //{ 
     // e.Row.Cells[2].Text = "<img src='tempN.png'>"; 
     //} 
     #endregion 

     #region "Commented code for Col.H" 

     if (colH == "1") 
     { 
      e.Row.Cells[1].Text = string.Empty; 
      //e.Row.Cells[1].Text = "<a href=''> <img id='13' alt='Click' border='0' src='plus.gif'/> </a>"; 
      string js = string.Format("javascript:ShowChildGrid('div{0}');", colId); 
      HyperLink lnk = (HyperLink)e.Row.FindControl("hlPlus"); 
      if (lnk!=null) 
      { 
       lnk.NavigateUrl = js; 
       lnk.ImageUrl = "plus.gif"; 
       lnk.Visible = true; 
      } 
      //Page.ClientScript.RegisterStartupScript(this.GetType(), "HCol", "ShowChildGrid("+ colId + ");", true); 
     } 
     else 
     { 
      e.Row.Cells[1].Text = string.Empty; 
      e.Row.Cells[1].Text = ""; 
     } 
     #endregion 

     DataTable dt1 = new DataTable(); 
     DataTable dt2 = new DataTable(); 

     DataRow dr1 = null; 
     DataRow dr2 = null; 
     DataRow dr3 = null; 
     DataRow dr4 = null; 
     DataRow dr5 = null; 
     DataRow dr7 = null; 

     DataRow r = dt1.NewRow(); 

     DataSet ds1 = new DataSet(); 
     DataSet ds2 = new DataSet(); 

     dt1.TableName = "Opportunity1"; 

     dt1.Columns.Add(new System.Data.DataColumn("ID#", typeof(System.String))); 
     dt1.Columns.Add(new System.Data.DataColumn("Entry Date", typeof(System.String))); 
     dt1.Columns.Add(new System.Data.DataColumn("Other Text", typeof(System.String))); 
     ds1.Tables.Add(dt1); 

     dt2.Columns.Add(new System.Data.DataColumn("ID#", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("Entry Date", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("BU", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("BE", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("Product Family", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("Project Name", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("SOP", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("Award Date", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("Milestone Next Date", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("Contract Status", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("ProbSuccess", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("Key Account", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("Sales SubRegion", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("Growth", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("SalesOE", typeof(System.String))); 
     dt2.Columns.Add(new System.Data.DataColumn("SalesAM", typeof(System.String))); 
     ds2.Tables.Add(dt2); 

     dr2 = dt1.NewRow(); 
     dr3 = dt1.NewRow(); 
     dr4 = dt1.NewRow(); 
     dr5 = dt1.NewRow(); 

     dr1["ID#"] = ""; 
     dr2["ID#"] = ""; 
     dr3["ID#"] = ""; 
     dr4["ID#"] = ""; 
     dr5["ID#"] = ""; 

     dr1["Entry Date"] = "18/01/2010"; 
     dr2["Entry Date"] = "19/01/2010"; 
     dr3["Entry Date"] = "20/01/2010"; 
     dr4["Entry Date"] = "21/01/2010"; 
     dr5["Entry Date"] = "14/01/2010"; 

     dr1["Other Text"] = "17:25CET changed by"; // - product family: ABS, Milestone Date: 23.02.1022, Contract Status: Signed, Probability of success: 100%"; 
     dr2["Other Text"] = "18:44CET changed by"; //- product family: ABS, Milestone Date: 23.02.1022, Contract Status: Signed, Probability of success: 100%"; 
     dr3["Other Text"] = "19:25CET changed by"; //- product family: ABS, Milestone Date: 23.02.1022, Contract Status: Signed, Probability of success: 100%"; 
     dr4["Other Text"] = "14:25CET changed by"; //- product family: ABS, Milestone Date: 23.02.1022, Contract Status: Signed, Probability of success: 100%"; 
     dr5["Other Text"] = "11:25CET changed by"; //- product family: ABS, Milestone Date: 23.02.1022, Contract Status: Signed, Probability of success: 100%"; 

     dt1.Rows.Add(dr1); 
     dt1.Rows.Add(dr2); 
     dt1.Rows.Add(dr3); 
     dt1.Rows.Add(dr4); 
     dt1.Rows.Add(dr5); 

     GridView gv12 = (GridView)e.Row.FindControl("GridView2"); 
     gv12.DataSource = ds1.Tables[0]; 
     gv12.DataBind(); 

     for (int i = 0; i < gv12.Rows.Count; i++) 
     { 
      gv12.RowStyle.BackColor = System.Drawing.Color.Gray; 
     } 


     dr7 = dt2.NewRow(); 

     dr7["ID#"] = "11-0101"; 
     dr7["Entry Date"] = "19/01/2010"; 
     dr7["BU"] = "VDC"; 
     dr7["BE"] = "ASES"; 
     dr7["Product Family"] = "Car Air Systems"; 
     dr7["Project Name"] = "Example"; 
     dr7["SOP"] = "09/08/2011"; 
     dr7["Award Date"] = "10/2011"; 
     dr7["Milestone Next Date"] = System.DateTime.Today.ToString("dd.MM.yyyy"); 
     dr7["Contract Status"] = "won"; 
     dr7["ProbSuccess"] = "70%"; 
     dr7["Key Account"] = "E-Paccar"; 
     dr7["Sales SubRegion"] = "North America"; 
     dr7["Growth"] = "10%"; 
     dr7["SalesOE"] = "150"; 
     dr7["SalesAM"] = "18"; 

     dt2.Rows.Add(dr7); 

     GridView gv13 = (GridView)e.Row.FindControl("GridView3"); 
     gv13.DataSource = ds2.Tables[0]; 
     gv13.DataBind(); 
    } 
} 

El hyperlinkhlPlus es un campo hyperlink dentro de campo de plantilla GridView 's (plantilla de elemento).

Respuesta

43

Prueba esto:

foreach(GridViewRow row in GridView1.Rows) { 
    if(row.RowType == DataControlRowType.DataRow) { 
     HyperLink myHyperLink = row.FindControl("myHyperLinkID") as HyperLink; 
    } 
} 

Si usted está manejando evento RowDataBound, es como esto:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     HyperLink myHyperLink = e.Row.FindControl("myHyperLinkID") as HyperLink; 
    } 
} 
+0

myHyperLink está llegando nula ...! –

+0

publique su código! – Arief

+0

¡Pregunta actualizada! –

-1

Si su GridView es databond, hacer una columna de índice en el conjunto de resultados que retrive como esto:

select row_number() over(order by YourIdentityColumn asc)-1 as RowIndex, * from YourTable where [Expresion] 

En el control de comandos que desea utilizar hacer que el valor de la propiedad CommandArgument igual al índice de fila de la tabla Conjunto de datos rowIndex así:

<asp:LinkButton ID="lbnMsgSubj" runat="server" Text='<%# Eval("MsgSubj") %>' Font-Underline="false" CommandArgument='<%#Eval("RowIndex") %>' /> 

Uso caso OnRowCommand al fuego al hacer clic en el botón de enlace de la siguiente manera:

<asp:GridView ID="gvwStuMsgBoard" runat="server" AutoGenerateColumns="false" GridLines="Horizontal" BorderColor="Transparent" Width="100%" OnRowCommand="gvwStuMsgBoard_RowCommand"> 

Finalmente el código subyacente a continuación, puede hacer lo que como cuando el evento se activa la siguiente manera:

protected void gvwStuMsgBoard_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    Panel pnlMsgBody = (Panel)gvwStuMsgBoard.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("pnlMsgBody"); 
    if(pnlMsgBody.Visible == false) 
    { 
     pnlMsgBody.Visible = true; 
    } 
    else 
    { 
     pnlMsgBody.Visible = false; 
    } 
} 
-1
string textboxID; 
string da; 
textboxID = "ctl00$MainContent$grd$ctl" + (grd.Columns.Count + j).ToString() + "$txtDyna" + (k).ToString(); 
textboxID= ctl00$MainContent$grd$ctl12$ctl00; 
da = Request.Form(textboxID); 
+0

" MALO "rechazó a los votantes por no publicar comentarios. – htm11h

1

puede utilizar este código para encontrar HyperLink en GridView. El uso de e.Row.Cells[0].Controls[0] para encontrar la primera posición de control en GridView.

protected void AspGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
{  
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DataRowView v = (DataRowView)e.Row.DataItem;   

     if (e.Row.Cells.Count > 0 && e.Row.Cells[0] != null && e.Row.Cells[0].Controls.Count > 0) 
     { 
      HyperLink link = e.Row.Cells[0].Controls[0] as HyperLink; 
      if (link != null) 
      {      
        link.Text = "Edit"; 
      }    
     }  

    } 
} 
1

Lo he hecho accediendo a los controles dentro del control de la celda. Encontrar en todas las colecciones de control.

ControlCollection cc = (ControlCollection)e.Row.Controls[1].Controls; 

Label lbCod = (Label)cc[1]; 
0
protected void gvTurnos_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    try 
    { 

     if (e.Row.RowType == DataControlRowType.EmptyDataRow) 
     { 
      LinkButton btn = (LinkButton)e.Row.FindControl("btnAgregarVacio"); 
      if (btn != null) 
      { 
       btn.Visible = rbFiltroEstatusCampus.SelectedValue == "1" ? true : false; 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
} 
Cuestiones relacionadas