简体   繁体   English

将GridView参数传递给存储的Proc

[英]Passing GridView Parameters to Stored Proc

I'm working with some new concepts I haven't dealt with before, so I might be over complicating this. 我正在处理一些以前从未处理过的新概念,因此我可能会使其复杂化。

I have a GridView that populates from a 5 Table Join. 我有一个从5表联接填充的GridView。 Each column represents one of the 5 tables in the Join. 每列表示联接中5个表之一。 The Functionality I am trying to achieve is this: 我要实现的功能是这样的:

  1. User selects the autogenerated Edit LinkButton 用户选择自动生成的Edit LinkBut​​ton
  2. User Edits One or more Cells in the Row 用户编辑行中的一个或多个单元格
  3. User selects the autogenerated Update LinkButton 用户选择自动生成的更新链接按钮
  4. Params are passed to the Stored Proc which updates the effected tables. 将参数传递给存储过程,该过程将更新受影响的表。

I have a couple uncertainties about how to proceed. 我对如何进行有一些不确定性。 If I were querying the Update directly I would need to pass the ID, changed text and a foreign key ID from another column. 如果我直接查询更新,则需要传递ID,更改的文本和另一列中的外键ID。 So my question is how do I get the GridView UpdateCommand to pass the entire row's data to stored Proc? 所以我的问题是如何获取GridView UpdateCommand将整个行的数据传递给存储的Proc? I currently have set up the Stored Proc with an additional param that I was using to determine which table needed to be updated, but since it could be multiple tables, I am thinking this is the wrong approach. 我目前使用其他参数设置了存储过程,该参数用于确定需要更新的表,但是由于可能是多个表,因此我认为这是错误的方法。 Here is my GV, DSN, and SP. 这是我的GV,DSN和SP。

 <asp:GridView ID="GridView1"
    runat="server"
    AutoGenerateColumns="False" 
    DataKeyNames="id" DataSourceID="SqlDataSource1" 
    EnableModelValidation="True"
    AllowSorting="True" 
    EnableSortingAndPagingCallbacks="True"
    allowpaging="True"
    pagesize="26"
    ondatabound="GridView1_DataBound">    

        <Columns>
<asp:BoundField DataField="id" HeaderText="id" InsertVisible="True"
 ReadOnly="True" SortExpression="id" />
            <asp:BoundField DataField="Manufacturer" HeaderText="Manufacturer"   
SortExpression="Manufacturer" />
            <asp:BoundField DataField="PriModel" HeaderText="PriModel" 
SortExpression="PriModel" />
            <asp:BoundField DataField="SecModel" HeaderText="SecModel"  
SortExpression="SecModel" />
            <asp:BoundField DataField="Form" HeaderText="FormFactor" 
SortExpression="Form" />
            <asp:BoundField DataField="Active" HeaderText="Active" 
SortExpression="Active"/>
            <asp:CommandField ShowEditButton="True" />                
        </Columns>
       </asp:GridView>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" DataSourceMode="DataSet"
    ConnectionString="<%$ ConnectionStrings:inventory_v2ConnectionString %>" 
    SelectCommand="SELECT dbo.Models.ID,dbo.Models.Active, 
    dbo.Models_PriModels.PriModel, dbo.Models_SecModels.SecModel, 
    dbo.Models_OEMs.Manufacturer, dbo.Models_FormFactor.Form
    FROM dbo.Models INNER JOIN dbo.Models_FormFactor ON 
    dbo.Models.FormFactor = dbo.Models_FormFactor.ID INNER JOIN
    dbo.Models_OEMs ON dbo.Models.Manufacturer = dbo.Models_OEMs.ID INNER JOIN
    dbo.Models_PriModels ON dbo.Models.PriModel = dbo.Models_PriModels.ID AND   
    dbo.Models_OEMs.ID = dbo.Models_PriModels.Manufacturer INNER JOIN
    dbo.Models_SecModels ON dbo.Models.SecModel = dbo.Models_SecModels.ID AND 
    dbo.Models_PriModels.ID = dbo.Models_SecModels.PriModel ORDER BY dbo.Models.ID 
    DESC"
    UpdateCommand="Procedure_UpdateModelsTables" UpdateCommandType="StoredProcedure"
    OnUpdated="OnDSUpdatedHandler"   
    InsertCommand="">
</asp:SqlDataSource>

    CREATE PROCEDURE <Procedure_UpdateModelsTables> 

    <@Param int>,
    <@ManufacturerID int>,
    <@Manufacturer varchar(50)>,
    <@PriModelID int>,
    <@PriModel varchar(50)>,
    <@SecModelID int>,
    <@SecModel varchar(50)>,
    <@FormID int>,
    <@Form varchar(50)>,
    <@ModelsID int>,
    <@Active char(1)>,
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    -- Insert statements for procedure here
    --SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
    IF @param = 1     
        exec SP_OEMTable @ManufacturerID,@Manufacturer;
    IF @param = 2
       exec SP_PriModelsTable @PriModelID,@PriModel;
    IF @param = 3     
        exec SP_SecModelsTable @SecModelID,@SecModel;
    IF @param = 4
       exec SP_FormsTable @FormID,@Form;
    IF @param = 5
       exec SP_ModelsTable @ModelsID,@Active;

END

CREATE PROCEDURE SP_OEMTable
    @ManufacturerID int,
    @Manufacturer varchar(50)
AS
BEGIN  
    UPDATE Models_OEMs SET Manufacturer = @Manufacturer WHERE ID = @ManufacturerID;
END

CREATE PROCEDURE SP_PriModelsTable
    @PriModelID int,
    @ManufacturerID int,
    @PriModel varchar(50)
AS
BEGIN  
    UPDATE Models_PriModels SET PriModel = @PriModel WHERE ID = @PriModelID AND Manufacturer = @ManufacturerID;
END
CREATE PROCEDURE SP_SecModelsTable
    @SecModelID int,
    @PriModelID int,
    @SecModel varchar(50)
AS
BEGIN  
    UPDATE Models_SecModels SET SecModel = @SecModel WHERE ID = @SecModelID AND PriModel = @PriModelID;
END
CREATE PROCEDURE SP_FormsTable
    @FormID int,
    @Form varchar(50)
AS
BEGIN  
    UPDATE Models_FormFactor SET Form = @Form WHERE ID = @FormID;
END
CREATE PROCEDURE SP_ModelsTable
    @ModelsID int,
    @Active char(1)
AS
BEGIN  
    UPDATE Models SET Active = @Active WHERE ID = @ModelsID;
END
GO

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM