如何在分页期间将ASPxTextBox的值存储在DevExpress GridView DataItemTemplate中

时间:2018-04-16 12:36:55

标签: c# asp.net gridview devexpress

我有一个gridview,我附上了一些列,允许用户将数据输入到文本框中。

当用户在任何文本框中输入/输入数据,然后如果他更改页面索引,然后当他回到旧页面时,文本框中输入的数据就会丢失。

所以有什么方法可以保持文本框中的值/数据事件用户可以通过更改网格视图的页面索引来访问不同的页面吗?

<dx:ASPxGridView EnablePagingGestures="True" SettingsPager-PageSize="5" ID="grdSelectedItem" runat="server" OnPageIndexChanged="grdSelectedItem_PageIndexChanged" AutoGenerateColumns="False" KeyFieldName="ProductID">
    <Columns>
        <dx:GridViewDataTextColumn FieldName="Title" Caption="Product Tittle" Settings-AllowAutoFilter="False">
        </dx:GridViewDataTextColumn>

        <dx:GridViewDataTextColumn FieldName="CountItem" Caption="Count Items" Settings-AllowAutoFilter="False" Width="75px">
            <DataItemTemplate>
                <asp:TextBox  runat="server" ID="txtCountItem" Text='<%# Eval("CountItem") %>'></asp:TextBox>
            </DataItemTemplate>
        </dx:GridViewDataTextColumn>                
    </Columns>
</dx:ASPxGridView>

1 个答案:

答案 0 :(得分:2)

出现此问题是因为分页(也使用排序和分组)使用发送到服务器的回调更新DataItemTemplate数据,Session内的所有编辑器由于ASP.NET页面生命周期而失去其值。因此,您需要另一种方法将文本框值存储在项模板中,例如隐藏字段或Init状态变量,方法是处理相应控件的CustomUnboundColumnData处理程序(如果使用DataItemTemplate处理程序<dx:ASPxHiddenField ID="hiddenField" runat="server" ClientInstanceName="hf"></dx:ASPxHiddenField> 的列是未绑定的列。)

如果你想使用隐藏字段(我认为这是最简单的方法),请设置一个隐藏字段:

DataItemTemplate

然后,更新标记&amp;代码隐藏,以便Init内的文本框通过处理存储文本框值和设置的ValueChangedTextChanged(或<script> function grdSelectedItem_Init(s, e) { if (hf.Contains(s.cpHFKey)) s.SetValue(hf.Get(s.cpHFKey)); } function grdSelectedItem_ValueChanged(s, e) { hf.Set(s.cpHFKey, s.GetValue()); } </script> <!-- other stuff --> <dx:ASPxGridView EnablePagingGestures="True" SettingsPager-PageSize="5" ID="grdSelectedItem" runat="server" OnPageIndexChanged="grdSelectedItem_PageIndexChanged" AutoGenerateColumns="False" KeyFieldName="ProductID"> <Columns> <dx:GridViewDataTextColumn FieldName="Title" Caption="Product Tittle" Settings-AllowAutoFilter="False"> </dx:GridViewDataTextColumn> <dx:GridViewDataTextColumn FieldName="CountItem" Caption="Count Items" Settings-AllowAutoFilter="False" Width="75px"> <DataItemTemplate> <dx:ASPxTextBox ID="txtCountItem" runat="server" Text='<%# Eval("CountItem") %>' OnInit="txtCountItem_Init"> <ClientSideEvents Init="grdSelectedItem_Init" ValueChanged="grdSelectedItem_ValueChanged" /> </dx:ASPxTextBox> </DataItemTemplate> </dx:GridViewDataTextColumn> </Columns> </dx:ASPxGridView> )事件在服务器端和客户端都有事件处理程序回调后的价值:

<强>标记

protected void txtCountItem_Init(object sender, EventArgs e) 
{
    ASPxTextBox textBox = sender as ASPxTextBox;
    GridViewDataItemTemplateContainer container = textBox.NamingContainer as GridViewDataItemTemplateContainer;

    textBox.JSProperties["cpHFKey"] = String.Format("{0}_txtCountItem_{1}", container.Grid.ClientID, container.KeyValue);

    textBox.ClientIDMode = ClientIDMode.Static;

    // other stuff
}

代码

#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

相关主题: