C# 如何使用向导从使用datasource和SP的gridview中删除数据
我使用gridview来选择、删除和更新数据库中的数据。我编写了一个SP来执行所有这些操作。SP根据参数决定要执行的操作 这是我的gridview的图像C# 如何使用向导从使用datasource和SP的gridview中删除数据,c#,asp.net,stored-procedures,gridview,sqldatasource,C#,Asp.net,Stored Procedures,Gridview,Sqldatasource,我使用gridview来选择、删除和更新数据库中的数据。我编写了一个SP来执行所有这些操作。SP根据参数决定要执行的操作 这是我的gridview的图像 我使用的数据源在这里 <asp:SqlDataSource ID="dsDomain" runat="server" ConnectionString="<%$ ConnectionStrings:conLogin %>" Sele
我使用的数据源在这里
<asp:SqlDataSource ID="dsDomain" runat="server"
ConnectionString="<%$ ConnectionStrings:conLogin %>"
SelectCommand="Tags.spOnlineTest_Domain"
SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="False"
DeleteCommand="Tags.spOnlineTest_Domain" DeleteCommandType="StoredProcedure" OnDeleting="DomainDeleting">
<SelectParameters>
<asp:Parameter ConvertEmptyStringToNull="true" DefaultValue="" Name="DomainId" Type="String" />
<asp:Parameter ConvertEmptyStringToNull="true" DefaultValue="" Name="Domain" Type="String" />
<asp:Parameter ConvertEmptyStringToNull="true" DefaultValue="" Name="Description" Type="String" />
<asp:Parameter DefaultValue="1" Name="OperationType" Type="Byte" />
</SelectParameters>
<DeleteParameters>
<asp:ControlParameter ControlID="GridView1" Name="DomainId"
PropertyName="SelectedValue" Size="4" Type="Int32" />
选择操作正常。
但当我试图删除时,它说
过程或函数“spOnlineTest\u Domain”需要参数“@Domain”,但未提供该参数但是我提供这个参数,作为 我的存储过程调用是这样的 EXEC Tags.spOnlineTest_域NULL、NULL、NULL、1//对于Select last参数将为1 EXEC Tags.spOnlineTest_Domain“SelectedRow's DomainId”),NULL,NULL,4//删除最后一个参数将为4 我的程序有4个参数,其中最后一个参数将由程序员设置,它将告诉程序要执行哪种操作。 对于“仅选择”,最后一个参数必须不为Null。 对于删除,第一个和最后一个参数不能为NULL 我的第一个Delete参数是表的主键。当用户选择一行并点击Delete时,我正在传递此值。我不确定使用PropertyName=“SelectedValue”是否可以获得正确的ID值
http://www.freeimagehosting.net/uploads/0a5de50661.jpg />如果尚未实现ObjectDataSource的OnDelete事件,请尝试以下操作
<asp:ObjectDataSource .... OnDeleting="YourDeletingEvent" ...
</asp:ObjectDataSource>
请查看更多详细信息。如果尚未实现ObjectDataSource的OnDeleteing事件,请尝试以下操作
<asp:ObjectDataSource .... OnDeleting="YourDeletingEvent" ...
</asp:ObjectDataSource>
请查看更多详细信息。您可以写:(在gridView标记之间)
\两个问题:您是否在GrdiView中定义了“DataKey”?您是否使用ObjectDataSource?如果是,为什么不跟踪它?是的,我定义了DataKeyNames=“DomainId”。是的,我得到了堆栈跟踪。但我无法理解它。请发布您的ObjectDataSource标记两个问题:您定义了“DataKey”吗“在格迪维尤?您正在使用ObjectDataSource吗,如果是,为什么不跟踪它呢?是的,我已经定义了DataKeyNames=“DomainId”。是的,我得到了一个堆栈跟踪。但我无法理解。请发布您的objectdatasourcemarkup@madatanic这里有一个修订。请检查itOk,然后将域添加到GridView的DataKeyNames属性中为什么必须在DataKeyNames中添加域?以便ObjectDataSource知道获取帮助的价值。您的解决方案对我有效,尽管我希望它仅从frontent为我有效,而不使用代码隐藏文件+1为解决方案。但是Q对于我的实际需求仍然是开放的Solution@madatanic这里有一个修订。请检查itOk,然后将域添加到GridView的DataKeyNames属性中为什么必须在DataKeyNames中添加域?以便ObjectDataSource知道获取帮助的价值。您的解决方案对我有效,尽管我希望它仅从frontent为我有效,而不使用代码隐藏文件+1为解决方案。但是Q对于我实际想要的解决方案仍然是开放的。对于\<和\我很抱歉我无法修复它们。对于\<和\我无法修复它们
<asp:ObjectDataSource .... OnDeleting="YourDeletingEvent" ...
</asp:ObjectDataSource>
private void YourDeletingEvent(object source, ObjectDataSourceMethodEventArgs e)
{
IDictionary paramsFromPage = e.InputParameters;
//In this case I assume your stored procedure is taking a DomainId as a parameter
paramsFromPage.Remove("Domain");
paramsFromPage.Add("Domain", (int)paramsFromPage["DomainId"]);
paramsFromPage.Remove("DomainId");
}
</ItemTemplate>
</asp:TemplateField>
//makeDelete("YourStoredProcedure");
//mydataBindGV();
}