输入不会保存在Gridview行更新事件中

问题描述 投票:0回答:1

我知道之前已经问过这个问题,但是我已经尝试过那些帖子中的解决方案,但没有任何工作。

我有一个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()%>不起作用。

有没有人有任何想法?

c# asp.net gridview
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.