私はこの質問が以前に尋ねられたことは知っていますが、私はそれらの記事で解決策を試してみましたが、何も動作していません。入力は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を取得するが不要として
私の知る限り、私のコードはできるだけ簡潔にしておきたいと思います。いずれにしてもこれを変更しても問題は解決しません。 –
私の答えを更新しました。 – AsifAli72090