Ваши DeleteCommand и UpdateCommand не используют тот же ключ, который указан в свойстве DataKeyNames FormView
. Они должны быть примерно такими:
DeleteCommand="DELETE FROM [Common] WHERE [Project_Key] = @ProjectKey"
UpdateCommand="UPDATE [Common] " +
"SET [Project_Name] = @ProjectName, [Business_Category] = @BusinessCategory, [Project_Description] = @ProjectDescription, [Operations_Owner] = @OperationsOwner" +
"WHERE Project_Key=@ProjectKey>"
Свойство DataKeyNames используется для управления автоматическими ОБНОВЛЕНИЯМИ и УДАЛЕНИЯМИ, выполняемыми с помощью FormView
, поэтому это должен быть первичный ключ в вашей таблице, и он должен совпадать во всех трех местах (UpdateCommand, DeleteCommand и DataKeyNames). От MSDN :
Используйте свойство DataKeyNames, чтобы указать разделенный запятыми список имен полей, которые представляют первичный ключ источника данных.
(В примере кода на этой странице вы можете видеть, что параметр, используемый в предложении WHERE в UpdateCommand, совпадает со значением, указанным в DataKeyNames FormView
)
Как примечание, в показанном вами коде ваша команда UpdateCommand вообще не использует предложение where. Это означает, что он обновит каждую запись в вашей таблице с тем же набором значений. К вашему сведению =)
Редактировать: Когда вы используете FormView
, как это, вам не нужно, чтобы параметры UpdateParameters устанавливали так, как вы их используете (поскольку вы используете двустороннюю привязку данных на элементах управления в ваши шаблоны для редактирования / вставки). Попробуйте это для вашего SQLDataSource
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:hulc01ConnectionString %>"
SelectCommand="SELECT * FROM [Common]"
InsertCommand="INSERT INTO [Common] ([Project_Name], [Business_Category], [Project_Description], [Operations_Owner]) VALUES (@Project_Name, @Business_Category, @Project_Description, @Operations_Owner)"
DeleteCommand="DELETE FROM [Common] WHERE [ProjectKey] = @ProjectKey"
UpdateCommand="UPDATE [Common] SET [Project_Name] = @Project_Name, [Business_Category] = @Business_Category, [Project_Description] = @Project_Description, [Operations_Owner] = @Operations_Owner WHERE ProjectKey=@ProjectKey" >
</asp:SqlDataSource>
Обычно я использую UpdateParameters, DeleteParameters и т. Д., Когда я не использую FormView
, или мне нужно отфильтровать их на основе элемента управления вне FormView
. Дайте мне знать, если это не поможет вам.