我在向GridView
添加列时遇到问题,这会触发存储过程的启动。
我正在尝试创建一个库应用程序。
我在GridView
中显示可用的书籍,我需要添加一个新列,它将保存存储过程的触发器并获取列id_book
,作为存储过程的参数。
这是我的笔记输出。我需要什么。谢谢你的帮助。
id_book
。我的gridview标记的一部分:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id_book" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="id_book" HeaderText="id_book" InsertVisible="False" ReadOnly="True" SortExpression="id_book" />
<asp:BoundField DataField="book_name" HeaderText="book_name" SortExpression="book_name" />
<asp:BoundField DataField="id_author" HeaderText="id_author" SortExpression="id_author" />
<asp:CheckBoxField DataField="state" HeaderText="state" SortExpression="state" />
</Columns>
</asp:GridView>
我的存储过程:
CREATE PROCEDURE [dbo].[lendBook_sp]
@id_reader int,
@id_book int
AS
BEGIN
INSERT INTO dbo.lendBook (id_book, id_reader, lendDate)
VALUES (@id_book, @id_reader, GETDATE())
UPDATE dbo.book
SET state = 0
WHERE id_book = @id_book
END
答案 0 :(得分:1)
在这里,我编辑了您的HTML代码,以便将列添加到网格
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id_book" DataSourceID="SqlDataSource1" OnRowCommand="gridView_RowCommand" >
<Columns>
<asp:BoundField DataField="id_book" HeaderText="id_book" InsertVisible="False" ReadOnly="True" SortExpression="id_book" />
<asp:BoundField DataField="book_name" HeaderText="book_name" SortExpression="book_name" />
<asp:BoundField DataField="id_author" HeaderText="id_author" SortExpression="id_author" />
<asp:CheckBoxField DataField="state" HeaderText="state" SortExpression="state" />
<asp:ButtonField CommandName="EditRow" Text="Lend" CausesValidation=false></asp:ButtonField>
</Columns>
以下是当用户点击&#34; Lend&#34;时将调用的事件的C#代码。链接。
protected void gridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.Equals("EditRow"))
{
int _bookIDEdit = Convert.ToInt32(GridView1.DataKeys[Convert.ToInt32(e.CommandArgument.ToString())].Values["id_book"].ToString());
}
}
将BookID获取到intege变量后,您可以调用StoredProcedure。