Проблема UpdateCommand в TemplateField в asp.net GridView - PullRequest
0 голосов
/ 15 сентября 2009

У меня есть следующая сетка:

<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>

Когда я нажимаю кнопку «Изменить» и пытаюсь обновить Имя, указанный выше код никогда не обновляет Имя

Когда я изменяю параметр обновления имени на

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

страница вылетает с сообщением «невозможно найти элемент управления txtGridAccountName в ControlParameter Name». Я считаю, что это потому, что текстовое поле в поле шаблона получает другой идентификатор (что-то вроде ct100 $ txtGridAccountName $ ..), когда сетка отображается, и, очевидно, она не найдена.

имя получателя в первую очередь отображается как поле шаблона, потому что я отображаю его как ссылку на страницу с подробностями / транзакциями.

если я удалю поле шаблона и покажу имя, как это работает.

приветствуется любая помощь в решении этой проблемы.

1 Ответ

0 голосов
/ 16 сентября 2009

Для самостоятельной отладки необходимо подключиться к событию Обновление источника данных SQL и к событиям Обновление строки gridview, чтобы проверить наличие проблем.

В любом случае, не зная о дизайне вашей базы данных, я предполагаю, что вам не хватает типа в параметрах обновления. Попробуйте что-то вроде этого:

<UpdateParameters>
  <asp:Parameter Name="Name" Type="String" />
  <asp:Parameter Name="Id" Type="Int64" />
</UpdateParameters>
...