C# 如何使用向导从使用datasource和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

我使用gridview来选择、删除和更新数据库中的数据。我编写了一个SP来执行所有这些操作。SP根据参数决定要执行的操作

这是我的gridview的图像


我使用的数据源在这里

           <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标记之间) \ \asp:LinkButton ID=“linkButton1”runat=“server”CausesValidation=“false”CommandName=“Delete” OnClientClick=“return confirm('您确定要删除此记录吗?');“Text=”删除“/>

u可以写入:(在gridView标记之间) \ \asp:LinkButton ID=“linkButton1”runat=“server”CausesValidation=“false”CommandName=“Delete” OnClientClick=“return confirm('您确定要删除此记录吗?');“Text=”删除“/>



两个问题:您是否在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();
    }