使用存储过程中的RowUpdating事件更新网格视图时出错
本文关键字:网格 更新 视图 出错 事件 RowUpdating 存储 存储过程 过程中 | 更新日期: 2023-09-27 18:29:04
我有一个使用gridview的购物车示例。我只想使用存储过程更新一列。但在更新声明中,我遇到了一个问题。
这是我的sqldata源
<asp:SqlDataSource ID="SqlDataCart" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionStringSolar %>" DeleteCommand="DeleteItemFromCart" DeleteCommandType="StoredProcedure" SelectCommand="getCartbyUserName" SelectCommandType="StoredProcedure" UpdateCommandType="StoredProcedure" UpdateCommand="UpdQuantity">
<DeleteParameters>
<asp:Parameter Name="cartID" Type="Int32" />
</DeleteParameters>
<SelectParameters>
<asp:Parameter Name="userName" Type="String" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="cartID" Type="Int32" />
<asp:Parameter Name="quantity" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
这是我的网格视图
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="cartID" DataSourceID="SqlDataCart" OnPreRender="GridView1_PreRender" OnRowDeleting="GridView1_RowDeleting" BackColor="White" BorderColor="#336666" BorderStyle="Double" BorderWidth="3px" CellPadding="4" GridLines="Horizontal" Width="730px" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating">
<Columns>
<asp:TemplateField HeaderText="Product Name">
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:Label ID="lblProductName" runat="server" Text='<%# Eval("productName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Quantity">
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:Label ID="lblQuantity" runat="server" Text='<%# Eval("quantity") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtQuantity" runat="server" Text='<%# Eval("quantity")%>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Price">
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:Label ID="lblPrice" runat="server" Text='<%# Eval("price") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
</Columns>
</asp:GridView>
以及背后的代码
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
TextBox tx1 = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtQuantity");
if (GridView1.SelectedDataKey != null)
{
int item = Convert.ToInt32(GridView1.SelectedDataKey.Value);
SqlDataCart.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure;
SqlDataCart.UpdateCommand = "UpdQuantity";
SqlDataCart.UpdateParameters.Clear();
SqlDataCart.UpdateParameters.Add("cartID", item.ToString());
SqlDataCart.UpdateParameters.Add("quantity", tx1.Text);
SqlDataCart.Update();
SqlDataCart.DataBind();
}
}
我有删除的方法,这是工作没有问题。我已经测试了我的存储过程,它可以正常工作,这正是我所需要的。当我使用更新时,我会出现以下错误:无法将值NULL插入表的"quantity"列中。。。
我用更简单的方法解决了这个问题。我用边界字段更改了模板字段。我把ReadOnly="true"变成了我不需要更新的东西,我删除了后面的代码。现在的工作版本是这样的:
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="cartID" DataSourceID="SqlDataCart" OnPreRender="GridView1_PreRender" OnRowDeleting="GridView1_RowDeleting" BackColor="White" BorderColor="#336666" BorderStyle="Double" BorderWidth="3px" CellPadding="4" GridLines="Horizontal" Width="730px">
<Columns>
<asp:BoundField DataField="productName" HeaderText="Product Name" SortExpression="productName" ItemStyle-HorizontalAlign="Center" InsertVisible="False" ReadOnly="true">
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="quantity" HeaderText="Quantity" SortExpression="quantity" ItemStyle-HorizontalAlign="Center" >
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="price" DataFormatString="{0:0.00} $" HeaderText="Price" SortExpression="price" ItemStyle-HorizontalAlign="Center" ReadOnly="true">
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundField>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
</Columns>
</asp:GridView>