ASP.NET批量编辑GridView保存按钮

时间:2014-08-25 14:50:31

标签: c# asp.net linq gridview bulkinsert

我使用此批量编辑GridView控件http://aspnetrealworldcontr.codeplex.com/

我使用Linq并使用存储过程来更新数据库。

我不了解如何使用“保存”按钮更新数据库。 您可以使用一个按钮更新所有行。

在示例中,他们使用SqlDataSource

例如

        <div>
        <asp:Button runat="server" ID="SaveButton" Text="Save Data" />
        <rwg:BulkEditGridView ID="EditableGrid" DataSourceID="PubsDataSource" AutoGenerateColumns="False"
            DataKeyNames="au_id" SaveButtonID="SaveButton" runat="server">
            <Columns>
                <asp:BoundField HeaderText="Last Name" DataField="au_lname" />
                <asp:BoundField HeaderText="First Name" DataField="au_fname" />
                <asp:BoundField HeaderText="Phone" DataField="phone" />
                <asp:BoundField HeaderText="Address" DataField="address" />
                <asp:BoundField HeaderText="City" DataField="city" />
                <asp:BoundField HeaderText="State" DataField="state" />
                <asp:BoundField HeaderText="Zip Code" DataField="zip" />
                <asp:CheckBoxField HeaderText="Contract" DataField="contract" />
            </Columns>
        </rwg:BulkEditGridView>
        <asp:SqlDataSource ID="PubsDataSource" runat="server" 
            SelectCommand="SELECT [au_id], [au_lname], [au_fname], [phone], [address], [city], [state], [zip], [contract] FROM [authors]"
            UpdateCommand="UPDATE [authors] SET [au_lname] = @au_lname, [au_fname] = @au_fname, [phone] = @phone, [address] = @address, [city] = @city, [state] = @state, [zip] = @zip, [contract]=@contract WHERE [au_id] = @au_id"
            ConnectionString="<%$ ConnectionStrings:Pubs %>"  />
    </div>

我的代码 - 只有数量可以更新。

            <cc1:BulkEditGridView ID="CartGrid" runat="server" CssClass="table table-condensed" AutoGenerateColumns="False" GridLines="None" SaveButtonID="UpdateShoppingCart" EnableInsert="False" InsertRowCount="1">
            <Columns>
                <asp:BoundField DataField="ArtnrFull" HeaderText="Artnr" ReadOnly="True" ItemStyle-Width="10%">
                    <ItemStyle Width="10%"></ItemStyle>
                </asp:BoundField>
                <asp:BoundField DataField="ProductName" HeaderText="Namn" ReadOnly="True" />
                <asp:BoundField DataField="Quantity" HeaderText="Antal" ItemStyle-Width="10%">
                    <ItemStyle Width="10%"></ItemStyle>
                </asp:BoundField>
                <asp:BoundField DataField="Pris" DataFormatString="{0:c}" HeaderText="Pris" ReadOnly="True" ItemStyle-Width="20%">
                    <ItemStyle Width="20%"></ItemStyle>
                </asp:BoundField>
                <asp:BoundField DataField="Subtotal" DataFormatString="{0:c}" HeaderText="Subtotal" ReadOnly="True" ItemStyle-Width="20%">
                    <ItemStyle Width="20%"></ItemStyle>
                </asp:BoundField>
                <asp:TemplateField ShowHeader="False">
                    <ItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Delete" Text="">
                            <asp:Image ID="Image1" runat="server" ImageUrl="/img/delete.png" Width="20" />
                        </asp:LinkButton>
                    </ItemTemplate>
                    <ItemStyle Width="5%" />
                </asp:TemplateField>
                <asp:TemplateField Visible="False">
                    <ItemTemplate>
                        <asp:Label ID="LblShoppingCartId" runat="server" Text='<%# Bind("ShoppingCartId") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </cc1:BulkEditGridView>
        <asp:Button ID="UpdateShoppingCart" runat="server" Text="Spara" CssClass="btn btn-success pull-right" />

存储过程

CREATE PROCEDURE ShoppingCartUpdateQuantity
@ShoppingCartId int,
@Quantity int,
@ArtnrFull varchar(20)
AS
UPDATE ShoppingCartItems
            SET Quantity = @Quantity
            WHERE ArtnrFull = @ArtnrFull AND ShoppingCartItems.ShoppingCartId = @ShoppingCartId

猜猜,但是当我点击按钮时,这不会运行,网格就会消失。

        protected void grdContact_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {

        TextBox txtQuantity = (TextBox)CartGrid.Rows[e.RowIndex].FindControl("txtQuantity");
        Label lblArtnr = (Label)CartGrid.Rows[e.RowIndex].FindControl("lblArtnr");
        Label lblShoppingCartId = (Label)CartGrid.Rows[e.RowIndex].FindControl("lblShoppingCartId");

        LinqtoDBDataContext db = new LinqtoDBDataContext();
        db.ShoppingCartUpdateQuantity(Convert.ToInt32(lblShoppingCartId.Text),Convert.ToInt32(txtQuantity.Text), lblArtnr.Text);

        CartGrid.EditIndex = -1;
        FillGrid(Convert.ToInt32(lblShoppingCartId.Text));

    }

1 个答案:

答案 0 :(得分:0)

  protected void CartGrid_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        try
        {

        if (CartGrid.DirtyRows.Count > 0)
        {
            Label lblShoppingCartId = (Label)CartGrid.Rows[e.RowIndex].FindControl("lblShoppingCartId");
            var cartid = lblShoppingCartId.Text;
            //find out which rows were updated
            foreach (GridViewRow row in CartGrid.DirtyRows)
            {
                string lblArtnr = row.Cells[0].Text;
                TextBox txtQuantity = row.Cells[2].Controls[0] as TextBox;

                LinqtoDBDataContext db = new LinqtoDBDataContext();
                db.ShoppingCartUpdateQuantity(Convert.ToInt32(lblShoppingCartId.Text), Convert.ToInt32(txtQuantity.Text), lblArtnr);

            }
            FillGrid(Convert.ToInt32(cartid));

            alertdiv.Attributes.Add("class", "alert alert-success");
            alertdiv.Controls.Add(new LiteralControl("Kundvagnen updaterad"));
            alertdiv.Visible = true;

        }
        else
        {
            alertdiv.Attributes.Add("class", "alert alert-danger");
            alertdiv.Controls.Add(new LiteralControl("FEL! Kundvagnen ej updaterad"));
            alertdiv.Visible = true;
        }

        }
        catch (Exception)
        {

            alertdiv.Attributes.Add("class", "alert alert-danger");
            alertdiv.Controls.Add(new LiteralControl("FEL! Kundvagnen ej updaterad"));
            alertdiv.Visible = true;
        }

    }