RmcbainTheThird Ответов: 1

Как получить значение обновления текстового поля в нижнем колонтитуле


учитывая, что у меня есть этот объект в моем представлении сетки:

asp:TemplateField HeaderText="Display Text" SortExpression="DisplayText">
        <ItemTemplate><%# Eval("DisplayText") %></ItemTemplate>
        <EditItemTemplate>
           <asp:TextBox ID="txtDisplayText" Text='<%# Eval("DisplayText") %>' runat="server"></asp:TextBox>
        </EditItemTemplate>
        <FooterTemplate>
             <asp:TextBox ID="txtDisplayText" Text="xxx" runat="server"></asp:TextBox>
        </FooterTemplate>
</asp:TemplateField>


Когда я ввожу значение в txtDisplayText, я не вижу, что я ввел, когда выполняется событие OnRowCommand. Скорее я вижу текст, определенный в файле aspx для txtDisplayText("xxx").
Что я упустил?

Что я уже пробовал:

возня с viewstate; поиск по этому сайту; Google

Richard Deeming

Какой код вы используете, чтобы попытаться прочитать значение?

string text = ((TextBox)yourGridView.FooterRow.FindControl("txtDisplayText")).Text;

RmcbainTheThird

да, именно так я схватываю ценность

Richard Deeming

Привязываете ли вы сетку при каждой загрузке страницы, не проверяя IsPostBack сначала собственность?

RmcbainTheThird

да, это я. это что, опси :)

Richard Deeming

Да. Каждый раз, когда вы привязываете сетку, она выбрасывает все, что ввел пользователь, и воссоздает элементы управления. :)

1 Ответов

Рейтинг:
12

Richard Deeming

Как обсуждалось в комментариях, проблема вызвана привязкой сетки при каждой загрузке страницы без проверки IsPostBack сначала собственность.

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

Вместо:

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

Воспользуйся:
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindGrid();
    }
}