2013-10-21 86 views

回答

21

你可以試試下面的代碼

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

這裏PayScale的,incrementamt和週期的數據庫字段名。

1

嘗試使用克隆技術。

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

這應該有效。我不確定綁定是如何工作的。希望它不會阻止這個工作。

+1

DataGridViewRow是從winforms如果我正確,這個問題怎麼是關於在asp.net webforms的gridview .. – Peter

6

在這裏,我寫下一個樣本例如,你可以直接檢查目的運行這個例子:

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

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

我希望這可以幫助你。

請標記此答案有用,如果這解決了您的問題。

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

請給你的答案解釋,而不是幫助用戶學習只是一個代碼塊。有關更多信息,請參見[如何回答](http://stackoverflow.com/help/how-to-answer)。感謝您的加入! –

0

如果您正在使用的數據集在網格綁定,你可以在你的SQL數據適配器填充後添加一行:

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