2013-10-21 17 views
11

enter image description hereaggiungere nuova riga nella GridView dopo il legame C#, ASP.net

voglio aggiungere una nuova riga vuota per il GridView dopo vincolante come si vede nella foto quando si fa clic sul pulsante link qui sotto. Le caselle di testo all'interno di gridview dovrebbero rimanere invariate se vi sono dati inseriti in essa. voglio solo aggiungere una riga. mi aiuti per favore. Grazie in anticipo.

risposta

21

si può provare il seguente codice

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(); 
    } 

qui PayScale, incrementamt e il periodo sono il nome campo del database.

1

provare a utilizzare la tecnica di clonazione.

{ 
    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++; 
    } 
} 

Questo dovrebbe funzionare. Non sono sicuro di come funziona il binding. Spero che questo non impedisca a questo di funzionare.

+1

DataGridViewRow proviene da winforms se non corretto, questa domanda riguarda sempre il gridview in webforms asp.net .. – Peter

6

Qui, devo annotare un esempio di esempio è possibile eseguire questo esempio direttamente a scopo di verifica:

pagina aspx:

<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" /> 

codice C#:

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; 
} 

Spero che questo possa aiutarti.

Si prega di contrassegnare questa risposta utile se questo risolve il tuo problema.

2
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); 
     } 
    } 
} 
+4

Fornire spiegazioni nelle risposte anziché solo un blocco di codice per aiutare gli utenti a imparare. Vedi [Come rispondere] (http://stackoverflow.com/help/how-to-answer) per maggiori informazioni. Grazie per la partecipazione! –

0

Se si utilizza set di dati di legare in una griglia, è possibile aggiungere la riga dopo si compila la scheda di dati di SQL:

adapter.Fill (ds); ds.Tables (0) .Rows.Add();

Problemi correlati