locked
How to insert more records in database if gridview have more data asp.net c# RRS feed

  • Question

  • User696604810 posted

    Problem

    I cannot insert data to database from Grid View if Grid View Have more Records .

     <div>
        <asp:GridView ID="GridItems" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridItems_RowDataBound" OnRowEditing="OnRowEditing" OnRowCancelingEdit="OnRowCancelingEdit" >
            <Columns>
                <asp:BoundField DataField="RowNumber" HeaderText="Row Number" />
                <asp:TemplateField HeaderText="ItemCode">
                    <ItemTemplate>
                        <asp:TextBox ID="txtItemCode" runat="server"></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Quantity">
                    <ItemTemplate>
                        <asp:TextBox ID="TxtQuantity" runat="server"></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Price">
                    <ItemTemplate>
                        <asp:TextBox ID="TxtPrice" runat="server" Text="0"   OnTextChanged="TxtPrice_TextChanged" AutoPostBack="true" ></asp:TextBox>
                    </ItemTemplate>
                      <FooterTemplate>
                                <asp:TextBox ID="TxtPrice" AutoPostBack="true" OnTextChanged="TxtPrice_TextChanged" runat="server"></asp:TextBox>
                            </FooterTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Amount" >
                    <ItemTemplate>
                        <asp:TextBox ID="TxtAmount" runat="server">
                        </asp:TextBox>
                    </ItemTemplate>
                   
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        <br />
        <div style="display: none;">
            <asp:Button ID="ButtonAdd" runat="server" OnClick="ButtonAdd_Click" Text="Add New Row" />
        </div>
    private void SetInitialRow()
    
            {
    
                DataTable dt = new DataTable();
    
                DataRow dr = null;
    
                dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
    
                dt.Columns.Add(new DataColumn("ItemCode", typeof(string)));
    
                dt.Columns.Add(new DataColumn("Quantity", typeof(string)));
    
                dt.Columns.Add(new DataColumn("Price", typeof(string)));
                dt.Columns.Add(new DataColumn("Amount", typeof(string)));
    
                dr = dt.NewRow();
    
                dr["RowNumber"] = 1;
    
                dr["ItemCode"] = string.Empty;
    
                dr["Quantity"] = string.Empty;
    
                dr["Price"] = string.Empty;
                dr["Amount"] = string.Empty;
    
                dt.Rows.Add(dr);
    
                //dr = dt.NewRow();
    
    
    
                //Store the DataTable in ViewState
    
                ViewState["CurrentTable"] = dt;
    
    
    
                GridItems.DataSource = dt;
    
                GridItems.DataBind();
    
            }
    

    How to make insert to data in grid view to database  ?

    Friday, September 21, 2018 11:50 AM

All replies

  • User-893317190 posted

    Hi  ahmedbarbary,

    You could use footerTemplate and add a button to insert data.

    Below is my code.

     <form id="form1" runat="server">
            <div>
                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="SID" DataSourceID="SqlDataSource1"  ShowFooter="true"  >
                    <Columns>
                        <asp:BoundField DataField="SID" HeaderText="SID" InsertVisible="False" ReadOnly="True" SortExpression="SID" />
                       
                        <asp:TemplateField HeaderText="Name">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
                            </ItemTemplate>
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Name") %>' ></asp:TextBox>
                            </EditItemTemplate>
                            <FooterTemplate>
                                <asp:TextBox ID="TextBox1" runat="server" ></asp:TextBox>
                            </FooterTemplate>
                        </asp:TemplateField>
                   
                        <asp:TemplateField HeaderText="City">
                            <ItemTemplate>
                                 <asp:Label ID="Label2" runat="server" Text='<%# Eval("City") %>'></asp:Label>
                            </ItemTemplate>
                            <EditItemTemplate>
                                  <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("city") %>' ></asp:TextBox>
                            </EditItemTemplate>
                            <FooterTemplate>
                                <asp:TextBox ID="TextBox2" runat="server" ></asp:TextBox>
                            </FooterTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                           <ItemTemplate>
                               <asp:Button ID="Button1" runat="server" CommandName="Edit" Text="edit" />
                               <asp:Button ID="Button2" runat="server" CommandName="Delete" Text="delete" />
                           </ItemTemplate>
                            <EditItemTemplate>
                                 <asp:Button ID="Button1" runat="server" CommandName="update" Text="update" />
                               <asp:Button ID="Button2" runat="server" CommandName="cancel" Text="cancel" />
                            </EditItemTemplate>
                            <FooterTemplate>
                                 <asp:Button ID="Button1" runat="server"  Text="insert" OnClick="Button1_Click" />
                            </FooterTemplate>
                        </asp:TemplateField>
                    </Columns>
    
    
                </asp:GridView>
                <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:WebFormCases.Models.supplyModelConnectionString %>" SelectCommand="SELECT [SID], [Name], [City] FROM [Suppliers]" DeleteCommand="DELETE FROM [Suppliers] WHERE [SID] = @SID" InsertCommand="INSERT INTO [Suppliers] ([Name], [City]) VALUES (@Name, @City)" UpdateCommand="UPDATE [Suppliers] SET [Name] = @Name, [City] = @City WHERE [SID] = @SID">
                    <DeleteParameters>
                        <asp:Parameter Name="SID" Type="Int32" />
                    </DeleteParameters>
                    <InsertParameters>
                        <asp:Parameter Name="Name" Type="String" />
                        <asp:Parameter Name="City" Type="String" />
                    </InsertParameters>
                    <UpdateParameters>
                        <asp:Parameter Name="Name" Type="String" />
                        <asp:Parameter Name="City" Type="String" />
                        <asp:Parameter Name="SID" Type="Int32" />
                    </UpdateParameters>
                </asp:SqlDataSource>
            </div>
        </form>

    Code behind.

        private static string constr = ConfigurationManager.ConnectionStrings["supplyModel"].ConnectionString;
            protected void Button1_Click(object sender, EventArgs e)
            {
                string sql = "insert into suppliers values(@name,@city)";
                Button addButton = (Button)sender;
             TextBox box1=   addButton.NamingContainer.FindControl("TextBox1") as TextBox;
              TextBox box2=  addButton.NamingContainer.FindControl("TextBox2") as TextBox;
                using (SqlConnection con = new SqlConnection(constr))
                {
                    using (SqlCommand com = new SqlCommand(sql, con))
                    {
                        com.Parameters.AddWithValue("name",box1.Text);
                        com.Parameters.AddWithValue("city", box2.Text);
                        con.Open();
                       com.ExecuteNonQuery();
                    }
                }
                GridView1.DataBind();
    
            }

    The result.

    Best regards,

    Ackerly Xu

    Monday, September 24, 2018 2:20 AM
  • User-1716253493 posted

    Seem like you want to insert data by looping gridview rows.

    You cant insert same parameters twice, clear the parameters first before adding parameters

    cmd.Parameters.Clear();
    cmd.Parameters.Add(...);
    cmd.Parameters.Add(...);

    Monday, September 24, 2018 3:12 AM