Доступ к значениям ChildControl GridView - PullRequest
0 голосов
/ 02 октября 2009

Я попытался найти этот вопрос, и появилось много результатов, но не совсем то, что я получаю, так что вот так:

У меня есть простой элемент управления 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" />

, а затем в событии btnSearch_Click у меня нормальный цикл

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

Проблема в том, что CheckBox всегда отмечен = false, даже если я его проверяю!

Что мне нужно сделать, чтобы получить значения сообщений? кажется, что после нажатия я полностью теряю все, что сделано в сетке, я просто получаю пустые элементы управления.

на моей странице aspx direct у меня есть:

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

У меня есть проекты с , это поведение работает , но я не могу понять, почему у меня есть этот здесь на этой простой странице ....

У кого-нибудь есть подсказка?

Спасибо.

1 Ответ

2 голосов
/ 02 октября 2009

детская ошибка ...

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

вместо

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
        PopulateData();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...