[英]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: 我要实现的功能是这样的:
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
This tutorial is what I used to learn this process : 本教程是我用来学习此过程的内容:
http://www.codeproject.com/Articles/24085/Insert-Update-Delete-with-Gridview-Simple-Way http://www.codeproject.com/Articles/24085/Insert-Update-Delete-with-Gridview-Simple-Way
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.