0

次のグリッドがあります。

<asp:GridView DataSourceID="accountsDataSource" DataKeyNames="Id" ShowEditButton="true" ...>

  <asp:TemplateField HeaderText="Name">
    <ItemTemplate>
      <asp:Hyperlink ID="lnkGridEditEntry" runat="server" Text='<%# Bind("Name")%>' NavigateUrl="..." />
    </ItemTemplate>
    <EditItemTemplate>
      <asp:TextBox ID="txtGridAccountName" runat="server" Text='<%# Bind("Name") %>' />
    </EditItemTemplate>
  </asp:TemplateField>

</asp:GridView>

<asp:SqlDataSource ID="accountsDataSource" SelectCommand= "..." DeleteCommand= "..." UpdateCommand="update Account set [Name]=@Name where [Id]=@Id">
  <UpdateParameters>
    <asp:Parameter Name="Name" />
    <asp:Parameter Name="Id" />
  </UpdateParameters>
</asp:SqlDataSource>

「編集」ボタンをクリックして名前を更新しようとすると、上記のコードは名前を更新しません

Name update パラメータを

<asp:ControlParameter ControlID="txtGridAccountName" Name="Name" PropertyName="Text" Type="String" />

ページが「ControlParameter Name にコントロール txtGridAccountName が見つかりません」でクラッシュします。これは、グリッドがレンダリングされ、明らかに見つからないときに、テンプレート フィールドのテキスト ボックスが別の ID (ct100$txtGridAccountName$.. のようなもの) を取得するためだと思います。

詳細/取引ページへのリンクとして表示しているため、アカウント名は最初にテンプレート フィールドとしてレンダリングされます。

テンプレートフィールドを削除して名前を表示すると、これが機能します。

この問題を解決するための助けをいただければ幸いです。

4

1 に答える 1

0

これを自分でデバッグするには、SQL データソース Updating イベントと gridview Row Updating イベントの両方にフックして、問題をチェックする必要があります。

とにかく、データベースの設計について知らなくても、更新パラメーターのタイプが欠落していると思います。次のようなことを試してください:

<UpdateParameters>
  <asp:Parameter Name="Name" Type="String" />
  <asp:Parameter Name="Id" Type="Int64" />
</UpdateParameters>
于 2009-09-16T13:10:21.397 に答える