add new row in gridview after binding C#, ASP.net

前端 未结 5 1042
攒了一身酷
攒了一身酷 2020-12-09 04:26

\"enter

I want to add a new blank row to the gridview after binding as seen in the pic

相关标签:
5条回答
  • 2020-12-09 04:46
    protected void TableGrid_RowDataBound(object sender, GridViewRowEventArgs e)
    {
       if (e.Row.RowIndex == -1 && e.Row.RowType == DataControlRowType.Header)
       {
          GridViewRow gvRow = new GridViewRow(0, 0, DataControlRowType.DataRow,DataControlRowState.Insert);
          for (int i = 0; i < e.Row.Cells.Count; i++)
          {
             TableCell tCell = new TableCell();
             tCell.Text = "&nbsp;";
             gvRow.Cells.Add(tCell);
             Table tbl = e.Row.Parent as Table;
             tbl.Rows.Add(gvRow);
          }
       }
    }
    
    0 讨论(0)
  • 2020-12-09 04:49

    You can run this example directly.

    aspx page:

    <asp:GridView ID="grd" runat="server" DataKeyNames="PayScale" AutoGenerateColumns="false">
        <Columns>
            <asp:TemplateField HeaderStyle-HorizontalAlign="Left" HeaderText="Pay Scale">
                <ItemTemplate>
                    <asp:TextBox ID="txtPayScale" runat="server" Text='<%# Eval("PayScale") %>'></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderStyle-HorizontalAlign="Left" HeaderText="Increment Amount">
                <ItemTemplate>
                    <asp:TextBox ID="txtIncrementAmount" runat="server" Text='<%# Eval("IncrementAmount") %>'></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderStyle-HorizontalAlign="Left" HeaderText="Period">
                <ItemTemplate>
                    <asp:TextBox ID="txtPeriod" runat="server" Text='<%# Eval("Period") %>'></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    <asp:Button ID="btnAddRow" runat="server" OnClick="btnAddRow_Click" Text="Add Row" />
    

    C# code:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            grd.DataSource = GetTableWithInitialData(); // get first initial data
            grd.DataBind();
        }
    }
    
    public DataTable GetTableWithInitialData() // this might be your sp for select
    {
        DataTable table = new DataTable();
        table.Columns.Add("PayScale", typeof(string));
        table.Columns.Add("IncrementAmount", typeof(string));
        table.Columns.Add("Period", typeof(string));
    
        table.Rows.Add(1, "David", "1");
        table.Rows.Add(2, "Sam", "2");
        table.Rows.Add(3, "Christoff", "1.5");
        return table;
    }
    
    protected void btnAddRow_Click(object sender, EventArgs e)
    {
        DataTable dt = GetTableWithNoData(); // get select column header only records not required
        DataRow dr;
    
        foreach (GridViewRow gvr in grd.Rows)
        {
            dr = dt.NewRow();
    
            TextBox txtPayScale = gvr.FindControl("txtPayScale") as TextBox;
            TextBox txtIncrementAmount = gvr.FindControl("txtIncrementAmount") as TextBox;
            TextBox txtPeriod = gvr.FindControl("txtPeriod") as TextBox;
    
            dr[0] = txtPayScale.Text;
            dr[1] = txtIncrementAmount.Text;
            dr[2] = txtPeriod.Text;
    
            dt.Rows.Add(dr); // add grid values in to row and add row to the blank table
        }
    
        dr = dt.NewRow(); // add last empty row
        dt.Rows.Add(dr);
    
        grd.DataSource = dt; // bind new datatable to grid
        grd.DataBind();
    }
    
    public DataTable GetTableWithNoData() // returns only structure if the select columns
    {
        DataTable table = new DataTable();
        table.Columns.Add("PayScale", typeof(string));
        table.Columns.Add("IncrementAmount", typeof(string));
        table.Columns.Add("Period", typeof(string));
        return table;
    }
    
    0 讨论(0)
  • 2020-12-09 04:55

    try using the cloning technique.

    {
        DataGridViewRow row = (DataGridViewRow)yourdatagrid.Rows[0].Clone();
        // then for each of the values use a loop like below.
        int cc = yourdatagrid.Columns.Count;
        for (int i2 = 0; i < cc; i2++)
        {
            row.Cells[i].Value = yourdatagrid.Rows[0].Cells[i].Value;
        }
        yourdatagrid.Rows.Add(row);
        i++;
        }
    }
    

    This should work. I'm not sure about how the binding works though. Hopefully it won't prevent this from working.

    0 讨论(0)
  • 2020-12-09 04:56

    If you are using dataset to bind in a Grid, you can add the row after you fill in the sql data adapter:

    adapter.Fill(ds);
    ds.Tables(0).Rows.Add();
    
    0 讨论(0)
  • 2020-12-09 04:59

    you can try the following code

    protected void Button1_Click(object sender, EventArgs e)
       {
           DataTable dt = new DataTable();
    
           if (dt.Columns.Count == 0)
           {
               dt.Columns.Add("PayScale", typeof(string));
               dt.Columns.Add("IncrementAmt", typeof(string));
               dt.Columns.Add("Period", typeof(string));
           }
    
           DataRow NewRow = dt.NewRow();
           NewRow[0] = TextBox1.Text;
           NewRow[1] = TextBox2.Text;
           dt.Rows.Add(NewRow); 
           GridView1.DataSource = dt;
           GridViewl.DataBind();
       }
    

    here payscale,incrementamt and period are database field name.

    0 讨论(0)
提交回复
热议问题