输入未保存在Gridview行更新事件

时间:2017-10-10 18:11:44

标签: c# asp.net 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文本框中的任何值; &#34;降序&#34;总是回来无效。我知道在RowUpdating之前会触发page_load,但我无法在PostBack检查中包装填充我的gridview的代码,因为那时我的gridview变回空白(我仍然没有得到那个血腥的文本框值。)在会话内存中保存初始的预编辑网格视图数据并更新RowUpdating事件中的数据并不起作用。将文本框控件上的EnableViewState设置为&#34; true&#34;,然后删除&lt;%#Bind()%&gt;在text属性中,不起作用。

有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

由于无需在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;
}