我有一个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>
答案 0 :(得分:2)
出现此问题是因为分页(也使用排序和分组)使用发送到服务器的回调更新DataItemTemplate
数据,Session
内的所有编辑器由于ASP.NET页面生命周期而失去其值。因此,您需要另一种方法将文本框值存储在项模板中,例如隐藏字段或Init
状态变量,方法是处理相应控件的CustomUnboundColumnData
处理程序(如果使用DataItemTemplate
处理程序<dx:ASPxHiddenField ID="hiddenField" runat="server" ClientInstanceName="hf"></dx:ASPxHiddenField>
的列是未绑定的列。)
如果你想使用隐藏字段(我认为这是最简单的方法),请设置一个隐藏字段:
DataItemTemplate
然后,更新标记&amp;代码隐藏,以便Init
内的文本框通过处理存储文本框值和设置的ValueChanged
和TextChanged
(或<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"
相关主题: