如何删除gridview中的多行并进入我的数据库?

时间:2016-02-07 03:12:29

标签: c# asp.net gridview

我想通过一个按钮删除gridview中的多行,同时它在gridview中被删除,它也会被删除到我的数据库中

我可以在这里试用代码:

这是我的btn SAVE(它有INSERT和DELETE命令)

 protected void btnSave_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow row in GridView1.Rows)
        {

            if (row.RowType == DataControlRowType.DataRow)
            {

                string RefNo = GridView1.DataKeys[row.RowIndex].Values[1].ToString();
                string ProductID = GridView1.Rows[row.RowIndex].Cells[1].Text;
                //string ProductID = GridView1.DataKeys[row.RowIndex].Values[1].ToString();
                string Name = GridView1.Rows[row.RowIndex].Cells[2].Text;
                decimal Price = decimal.Parse(GridView1.Rows[row.RowIndex].Cells[3].Text);
                int Quantity = int.Parse(GridView1.Rows[row.RowIndex].Cells[4].Text);
                int Amount = int.Parse(GridView1.Rows[row.RowIndex].Cells[5].Text);


                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandText = "INSERT INTO SODetails (SOID, ProductID, Name, Price, Quantity, Amount, RefNo) " +
                    "VALUES (@SOID, @ProductID, @Name, @Price, @Quantity, @Amount, @RefNo)";

                cmd.Parameters.AddWithValue("@UserID", Session["userid"].ToString());
                cmd.Parameters.Add("@SOID", SqlDbType.VarChar).Value = SOID.Text;
                //cmd.Parameters.Add("@RefNo", SqlDbType.VarChar).Value = RefNo;
                cmd.Parameters.Add("@ProductID", SqlDbType.VarChar).Value = ProductID.ToString();
                cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = Name.ToString();
                cmd.Parameters.Add("@Price", SqlDbType.Decimal).Value = Price;
                cmd.Parameters.Add("@Quantity", SqlDbType.Int).Value = Quantity;
                cmd.Parameters.Add("@Amount", SqlDbType.Int).Value = Amount;
                cmd.Parameters.Add("@RefNo", SqlDbType.VarChar).Value = RefNo;
                cmd.ExecuteNonQuery();
                //con.Close();

                //con.Open();

                cmd.CommandText = "DELETE FROM Orders";
                //cmd.Parameters.Add("@RefNo", RefNo);


                cmd.ExecuteNonQuery();
                GridView1.EditIndex = -1;
                GridView1.DataBind();

                con.Close();

            }
        }

    }

老实说,它删除了......只是一个记录

Look here for my image of Gridview

每当我在gridview中有2个或更多项目时出现错误,请说:

Index was out of range. Must be non-negative and less than the size of the collection.Parameter name: index

Line 245:                {
Line 246:
Line 247:                    string RefNo = GridView1.DataKeys[row.RowIndex].Values[1].ToString();

这是我的ASP网:

 <div class="col-lg-12" align="center">

&nbsp;<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="RefNo" DataSourceID="SO" Width="1000px" Height="200px" 
       AllowPaging="True" HorizontalAlign="Center">
    <Columns>
        <asp:BoundField DataField="RefNo" HeaderText="RefNo" InsertVisible="False" 
            ReadOnly="True" SortExpression="RefNo" />
        <asp:BoundField DataField="ProductID" HeaderText="ProductID" 
            SortExpression="ProductID" />
        <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
        <asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" />
        <asp:BoundField DataField="Quantity" HeaderText="Quantity" 
            SortExpression="Quantity" />
        <asp:BoundField DataField="Amount" HeaderText="Amount" 
            SortExpression="Amount" />
        <asp:ButtonField ButtonType="Button" CommandName="Delete" HeaderText="Delete" 
            ShowHeader="True" Text="Delete" />
    </Columns>
        <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />

</asp:GridView>

   <asp:SqlDataSource ID="SO" runat="server" 
    ConnectionString="<%$ ConnectionStrings:MyOwnMeatshopSO %>" 
    SelectCommand="SELECT Orders.RefNo, Orders.ProductID, Products.Name,     Orders.Price, Orders.Quantity, Orders.Amount FROM Orders INNER JOIN Products ON     Orders.ProductID = Products.ProductID">
</asp:SqlDataSource>


   <div class="container">
   <div class="pull-right col-lg-5">
   <h4 />SUB TOTAL Php   <asp:Literal ID="ltSubTotal" runat="server">    </asp:Literal>
   <h4 />VAT (12%) 
   Php   <asp:Literal ID="ltVAT" runat="server"></asp:Literal>
   <h4 />TOTAL Php    <asp:Literal ID="ltTotal" runat="server"></asp:Literal>



   </div>
   </div>    
     <div class="container">    
<div class="pull-right col-lg-2">
    <asp:Button ID="btnSave" runat="server" class="btn btn" Text="Save" 
    style="color:White" BackColor="Black" onclick="btnSave_Click"/>
   </div>

   </div>

当我包含DELETE命令时,就会发生错误。 它似乎无法从我的GRIDVIEW&amp;中删除多条记录。数据库。 并且看起来我的代码不完整。

但是它再次只删除一条记录并显示错误

0 个答案:

没有答案