2013-04-02 49 views
0

我正在處理一些以前沒有處理過的新概念,所以我可能會過度複雜化。將GridView參數傳遞給存儲過程

我有一個從5表連接填充的GridView。每列表示Join中的5個表格之一。我想實現的功能是這樣的:

  1. 用戶選擇自動生成的編輯LinkBut​​ton的
  2. 用戶編輯行
  3. 用戶的一個或多個單元格選擇自動生成更新的LinkBut​​ton
  4. PARAMS被傳遞到Stored Proc更新受影響的表格。

我有幾個關於如何進行的不確定性。 如果我直接查詢Update,我需要從另一列傳遞ID,更改的文本和外鍵ID。 所以我的問題是如何讓GridView UpdateCommand將整行數據傳遞給存儲過程? 我目前已經建立了一個額外的參數,用於確定哪個表需要更新,但由於它可能是多個表,我認爲這是錯誤的方法。這是我的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 

回答

0
+0

這是完全不相干的。這隻有在您必須更新1個表格或1對1視圖時纔有效。 – user1431356

+0

在更新時,您可以啓動一個存儲過程來爲您做。在sql server上關閉。 – briskovich

+0

@ briskovich這就是我正在嘗試做的事情,但是將Params從ASP傳遞到SQL而不做代碼隱藏是令我困惑的事情。 – user1431356

相關問題