大家好,又见面了,我是你们的朋友全栈君。
设计 Users表:UserID,Name Articles表:ArticleID,UserID,ArticleTitle 生成视图:
SELECT dbo.Articles.ArticleID, dbo.Articles.ArticleTitle, dbo.Users.Name FROM dbo.Articles INNER JOIN dbo.Users ON dbo.Articles.UserID = dbo.Users.UserID
写一条执行删除的StoredProcedure:
CREATE PROCEDURE dbo.DeleteArticle @a int AS delete from Articles where ArticleID = @a RETURN
在aspx页面上,增加GridView,并指定数据源SqlDataSource
通过向导生成的SqlDataSource1: <asp:SqlDataSource ID=”SqlDataSource1″ runat=”server” ConnectionString=”<%$ ConnectionStrings:DataTesterConnectionString %>” SelectCommand=”SELECT * FROM [ViewArticles]” DeleteCommand=”DeleteArticle” DeleteCommandType=”StoredProcedure”> <DeleteParameters> <asp:Parameter Name=”a” Type=”Int32″ /> </DeleteParameters> </asp:SqlDataSource>
通过向导生成的GridView1,并增加删除按钮列: <asp:GridView ID=”GridView1″ runat=”server” DataSourceID=”SqlDataSource1″> <Columns> <asp:CommandField ShowDeleteButton=”True” /> </Columns> </asp:GridView>
如MSDN所述:为了使 GridView 控件的自动更新和删除功能工作,必须设置 DataKeyNames 属性。 加入ArticleID作为主键 <asp:GridView ID=”GridView1″ runat=”server” DataSourceID=”SqlDataSource1″ DataKeyNames=”ArticleID”> <Columns> <asp:CommandField ShowDeleteButton=”True” /> </Columns> </asp:GridView>
F5,执行了一下,”为过程或函数 DeleteArticle 指定的参数太多。 “
靠,就一个参数也不对? 利用cs编码有很多种方法实现这一过程,现在就较上劲了就不想写代码,怎么办? 在接下来的N久时间里,我无数次的试验,终于这样搞定了:
< asp:SqlDataSource ID =”SqlDataSource1″ runat =”server” ConnectionString =”<%$ ConnectionStrings:DataTesterConnectionString %>” SelectCommand =”SELECT * FROM [ViewArticles]” OldValuesParameterFormatString =”a” DeleteCommand =”DeleteArtile” DeleteCommandType =”StoredProcedure” > < DeleteParameters > < asp:Parameter Name =”a” Type =”Int32″ /> </ DeleteParameters > </ asp:SqlDataSource >
关键是OldValuesParameterFormatString=”a”这句!
或者干脆把 <DeleteParameters> <asp:Parameter Name=”a” Type=”Int32″ /> </DeleteParameters> 这些都去掉,照样能很好的工作!
在网上找了N久都没有找到解决办法,希望对有同样问题的人有些用处。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/164511.html原文链接:https://javaforall.cn