代码之家  ›  专栏  ›  技术社区  ›  balexandre

访问GridView的ChildControl值

  •  0
  • balexandre  · 技术社区  · 16 年前

    我试着搜索这个问题,结果很多,但不完全是我得到的,所以这里是:

    我有一个简单的GridView控件,我希望在提交后访问子控件的值

    我这样做:

    <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" />
    

    然后,在 BTNSwitter点击 事件我有正常循环

    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);
            }
        }
    }
    

    问题 是那个吗 复选框 总是选中=假,即使我选中它!

    我需要做什么来获取post值?点击后,我完全松开了网格中的所有操作,我得到的只是空控件。

    在我的ASPX页面中,我有:

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

    我确实有项目 这种行为有效 但我无法理解为什么在这个简单的页面中有这个……

    有人有线索吗?

    谢谢您。

    1 回复  |  直到 16 年前
        1
  •  1
  •   balexandre    16 年前

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

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