2009-10-02 6 views
0

j'ai essayé de rechercher cette question et les résultats d'abondance viennent, mais pas exactement ce que je veux, donc voilà:Accès ChildControl d'un GridView

Je simple contrôle GridView et je veux accéder à la valeur des commandes de l'enfant une fois inscrits par

que je fais ceci:

<asp:GridView ID="gvQuery" runat="server" GridLines="None" CellPadding="5" CellSpacing="5" 
    OnRowDataBound="gvQuery_RowDataBound" ShowHeader="False" AutoGenerateColumns="False"> 
    <Columns> 
     <asp:TemplateField ItemStyle-Width="20px"> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkActive" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="Description" /> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:DropDownList ID="ddlCondition" runat="server" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:TextBox ID="txtField1" runat="server" /> 
       <span class="text2">and&nbsp;<asp:TextBox ID="txtField2" runat="server" /></span> 
       <asp:HiddenField ID="hfFieldName" runat="server" Value='<%# Eval("InternalName") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

<asp:Button runat="server" ID="btnSearch" Text=" Search " 
       onclick="btnSearch_Click" /> 

puis, dans le cas btnSearch_Click je la boucle normale

foreach (GridViewRow gvr in gvQuery.Rows) 
{ 
    if (gvr.RowType == DataControlRowType.DataRow) 
    { 
     CheckBox ch = gvr.FindControl("chkActive") as CheckBox; 
     DropDownList dd = gvr.FindControl("ddlCondition") as DropDownList; 
     TextBox t1 = gvr.FindControl("txtField1") as TextBox; 
     TextBox t2 = gvr.FindControl("txtField2") as TextBox; 
     HiddenField hf = gvr.FindControl("hfFieldName") as HiddenField; 

     if (ch.Checked) 
     { 
      SearchResultField srf = new SearchResultField(); 
      Field field = fields.Find(x => x.Name == hf.Value); 

      srf.Name = field.Name; 
      srf.Operator = dd.SelectedValue; 
      srf.Owner = field.WhereOwner; 
      srf.Param1 = t1.Text; 
      srf.Param2 = t2.Text; 
      srf.Type = field.FieldType; 

      sr.Fields.Add(srf); 
     } 
    } 
} 

problème est que le CheckBox est toujours vérifiée = false même si je le vérifier!

Que dois-je faire pour obtenir les valeurs de poste? il semble que, après avoir cliqué, j'ai complètement perdu quelque chose dans la grille, j'ai juste des contrôles vides.

dans ma page aspx Je directe ont:

<%@ Page 
    Title="" 
    Language="C#" 
    MasterPageFile="~/3Rows.master" 
    AutoEventWireup="true" 
    ValidateRequest="false" 
    CodeFile="Default.aspx.cs" 
    Inherits="_Default" %> 

J'ai des projets avec ce comportement travail mais je ne peux pas comprendre pourquoi Seam dois-je celui-ci dans cette simple page .. ..

Quelqu'un a une idée?

Merci.

Répondre

1

erreur enfant ...

protected void Page_Load(object sender, EventArgs e) 
{ 
    PopulateData(); 
} 

au lieu

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
     PopulateData(); 
}