输入不会保存在Gridview行更新事件中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入不会保存在Gridview行更新事件中相关的知识,希望对你有一定的参考价值。
我知道之前已经问过这个问题,但是我已经尝试过那些帖子中的解决方案,但没有任何工作。
我有一个gridview,它是一个XML文件填充的,并且意味着要更新它。由于此gridview所在页面的用途,数据绑定发生在page_load事件上。此外,我正在使用TemplateFields来控制gridview的布局。
这是我的代码。首先,Gridview:
<asp:GridView ID="fileGrid" runat="server" EnableViewState="true" AutoGenerateColumns="False" Width="315px" BorderStyle="None"
OnRowDeleting="fileGrid_RowDeleting" OnRowEditing="fileGrid_RowEditing"
OnRowCancelingEdit="fileGrid_RowCancelingEdit" OnRowUpdating="fileGrid_RowUpdating"
OnRowDataBound="fileGrid_RowDataBound">
<Columns>
<asp:BoundField DataField="name" HeaderText="Uploaded Files" SortExpression="name" ReadOnly="true">
<ItemStyle CssClass="fileName" />
</asp:BoundField>
<asp:TemplateField HeaderText="Description">
<ItemStyle CssClass="desc-cell" />
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("desc") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="descTb" runat="server" Text='<%# Bind("desc") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemStyle CssClass="cmdCell" />
<ItemTemplate>
<asp:LinkButton ID="lnkEdit" runat="server" CommandName="Edit">Edit</asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="lnkUpdate" runat="server" CommandName="Update">Update</asp:LinkButton>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemStyle CssClass="cmdCell" />
<ItemTemplate>
<asp:LinkButton ID="lnkDelete" runat="server" CommandName="Delete">Delete</asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="lnkCancel" runat="server" CommandName="Cancel">Cancel</asp:LinkButton>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
还有我的OnRowUpdating功能。这是问题发生的地方:
protected void fileGrid_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int eRow = e.RowIndex;
GridViewRow row = fileGrid.Rows[eRow];
string name = row.Cells[0].Text;
string desc = ((TextBox)(row.Cells[1].FindControl("descTb"))).Text;
// Update XML via Linq-to-XML here
}
但是,我无法捕获输入到descTb文本框中的值; “desc”总是回来无效。我知道在RowUpdating之前会触发page_load,但是我无法在PostBack检查中包含填充我的gridview的代码,因为那时我的gridview变回空白(我仍然没有得到那个血腥的文本框值。)保存初始,在会话内存中预编辑网格视图数据并更新RowUpdating事件中的数据不起作用。将文本框控件上的EnableViewState设置为“true”,并删除text属性中的<%#Bind()%>不起作用。
有没有人有任何想法?
由于无需在RowUpdating事件中获得单独的GridViewRow,您可以像使用GridView.Rows[e.RowIndex].FindControl
一样:
string desc = ((TextBox)(fillGrid.Rows[e.RowIndex].FindControl("descTb"))).Text;
更新:这是一些可以帮助您的逻辑代码:
protected void Page_Load(object sender, EventArgs e)
{
fillGrid.DataSource = table;
if(!IsPostBack)
fillGrid.DataBind();
}
protected void fillGrid_RowEditing(object sender, GridViewEditEventArgs e)
{
fillGrid.EditIndex = e.NewEditIndex;
fillGrid.DataBind();
}
protected void fillGrid_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string desc = ((TextBox)(fillGrid.Rows[e.RowIndex].FindControl("descTb"))).Text;
}
以上是关于输入不会保存在Gridview行更新事件中的主要内容,如果未能解决你的问题,请参考以下文章
ASP .NET - 在 GridView 中更新之前保存现有数据的副本
如何在不将数据保存到数据库的情况下更新 Gridview 行