2017-10-10 12 views
0

私はこの質問が以前に尋ねられたことは知っていますが、私はそれらの記事で解決策を試してみましたが、何も動作していません。入力は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"は常にnullに戻ります。私は、RowUpdatingの前にpage_loadが発生することを知っていますが、私のgridviewは空白になりますので、PostBackチェックで私のgridviewを読み込むコードを折り返すことはできません。セッションメモリ内の初期のグリッドビューデータを編集し、RowUpdatingイベントのデータを更新することはできません。テキストボックスコントロールのEnableViewStateを "true"に設定し、テキストプロパティの<%Bind()%>を削除しても機能しません。

誰にもアイデアはありますか?あなたが好きなようにGridView.Rows[e.RowIndex].FindControlを使用することができますRowUpdatingイベントに別々のGridViewRowを取得するが不要として

答えて

0

、:

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

関連する問題