2017-10-10 46 views
0

我知道這個問題已被問過,但我已經嘗試過這些帖子中的解決方案,沒有任何工作。輸入不保存在Gridview行更新事件

我有一個從一個XML文件填充,並且是爲了更新一個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」總是返回null。我知道page_load在RowUpdating之前觸發,但我無法在PostBack檢查中包裝填充GridView的代碼,因爲那時我的gridview空白(並且我仍然沒有得到那個血腥的文本框值)。會話內存中初始的,預編輯的網格視圖數據並在RowUpdating事件中更新該數據不起作用。將文本框控件上的EnableViewState設置爲「true」,並刪除文本屬性中的<%#Bind()%>不起作用。

有沒有人有任何想法?

回答

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; 
} 
+0

我知道,我只是想保持我的代碼儘可能簡短。無論如何,更改這並不能解決我的問題。 –

+0

請參閱我已更新我的答案。 – AsifAli72090