我之前已经问过这个问题,但是我已经在这些帖子中尝试了解决方案,但没有任何工作。
我有一个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属性中,不起作用。
有没有人有任何想法?
答案 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;
}