Проблема UpdateCommand в TemplateField в asp.net GridView
У меня есть следующая сетка:
<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 ответ
Для самостоятельной отладки необходимо подключиться как к событию Обновление источника данных SQL, так и к событиям Обновление строки gridview, чтобы проверить наличие проблем.
В любом случае, не зная о дизайне вашей базы данных, я предполагаю, что вам не хватает типа в параметрах обновления. Попробуйте что-то вроде этого:
<UpdateParameters>
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="Id" Type="Int64" />
</UpdateParameters>