2016-05-11 6 views
2

GridViewのすべてのセルにTextBoxを使って行と列を動的に追加したいと思います。私はこれを成功させました。しかし、問題は、ボタンをクリックするとTextBoxの値を読み取ることができないということです。C#を使用してグリッドビュー内のダイナミック追加テキストボックスの値を読み取る方法?

<asp:GridView runat="server" ID="gv" OnRowDataBound="gv_OnRowDataBound"></asp:GridView> 

動的にグリッド内の行と列を追加します。ここでは

protected void btnGenerate_OnClick(object sender, EventArgs e) 
{ 
    int rowsCount = Convert.ToInt32(tbxRow.Text); 
    int colsCount = Convert.ToInt32(tbxCol.Text); 
    DataTable dt=new DataTable(); 
    for(int col=0;col<colsCount;col++) 
    { 
     dt.Columns.Add("D-" + col, typeof (int)); 
    } 
    for (int i = 0; i < rowsCount; i++) 
    { 
     DataRow dr = dt.NewRow(); 
     dt.Rows.Add(dr); 
    } 
    gv.DataSource = dt; 
    gv.DataBind(); 
} 

は、GridViewコントロールにテキストボックスを追加するための私のコードです:

protected void gv_OnRowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     for (int i = 0; i < e.Row.Cells.Count; i++) 
     { 
      TextBox txt = new TextBox(); 
      txt.ID = "tbx" + i; 
      e.Row.Cells[i].Controls.Add(txt); 
     } 
    } 
} 

私はの値を取得するには、これを試してみましたTextBoxが、常にnullを表示:

protected void btnSave_OnClick(object sender, EventArgs e) 
{ 
    foreach (GridViewRow row in gv.Rows) 
    { 
     if (row.RowType == DataControlRowType.DataRow) 
     { 
      for (int i = 0; i < row.Cells.Count; i++) 
      { 
       TextBox tb = (TextBox) row.Cells[i].FindControl("tbx" + i); 
      } 

     } 
    } 
} 

答えて

0

protected void GenerateGridColumn() 
{ 
    int colsCount = Convert.ToInt32(tbxCol.Text); 
    TemplateField tfield; 
    BoundField bfield = new BoundField(); 
    bfield.HeaderText = ""; 
    for (int col = 0; col <= colsCount; col++) 
    { 
     tfield = new TemplateField(); 
     tfield.HeaderText = "D-" + col; 
     gv.Columns.Add(tfield); 
    } 
    tfield = new TemplateField(); 
    tfield.HeaderText = "Supply"; 
    gv.Columns.Add(tfield); 

} 
protected void btnGenerate_OnClick(object sender, EventArgs e) 
{ 
    GenerateGridColumn(); 
    int rowsCount = Convert.ToInt32(tbxRow.Text); 
    DataTable dt = new DataTable(); 
    for (int i = 0; i <= rowsCount; i++) 
    { 
     DataRow dr = dt.NewRow(); 
     dt.Rows.Add(dr); 
    } 
    gv.DataSource = dt; 
    gv.DataBind(); 
    btnSave.Visible = true; 
} 


protected void gv_OnRowCreated(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     for (int i = 0; i < e.Row.Cells.Count; i++) 
     { 
      if (i > 0) 
      { 
       TextBox txt = new TextBox(); 
       txt.ID = "tbx" + i; 
       e.Row.Cells[i].Controls.Add(txt); 
      } 
     } 
    } 
} 

protected void btnSave_OnClick(object sender, EventArgs e) 
{ 
foreach (GridViewRow row in gv.Rows) 
{ 
    if (row.RowType == DataControlRowType.DataRow) 
    { 
     for (int i = 0; i < row.Cells.Count; i++) 
     { 
      TextBox tb = (TextBox) row.Cells[i].FindControl("tbx" + i); 
     } 
    } 
} 
} 
を更新しました
+0

サンプルコードまたはサンプルを@Sarowar Hossenとして提供できますか? – Deba

+0

これはjqueryコードの単なる例です。私はあなたが残りを知っていると思うwebmethodを追加する。 –

1

protected void gv_OnRowCreated(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     for (int i = 0; i < e.Row.Cells.Count; i++) 
     { 
      TextBox txt = new TextBox(); 
      txt.ID = "tbx" + i; 
      e.Row.Cells[i].Controls.Add(txt); 
     } 
    } 
} 

ですから、初期化し、追加し、それらをRowCreatedに、あなたがテキストを割り当てる場合RowDataBoundを使用使用する必要があります:

あなたはすべてのポストバックだけでなく、あなたがグリッドをデータバインドするときにトリガされOnRowCreatedにそれらを追加する必要があります。

しかし、なぜTemplateFieldを使用して、そこにテキストボックスを追加しないでください。それはあなたの人生をはるかに簡単にします。

サイド注:グリッドのRows -propertyを列挙している場合にのみDataRow -itemsが返されるので、あなたはDataControlRowType.DataRow -checkを必要としません:

protected void btnSave_OnClick(object sender, EventArgs e) 
{ 
    foreach (GridViewRow row in gv.Rows) 
    { 
     for (int i = 0; i < row.Cells.Count; i++) 
     { 
      TextBox tb = (TextBox) row.Cells[i].FindControl("tbx" + i); 
     } 
    } 
} 
+0

これを追加すると、テキストボックスが表示されませんTim Schmelter – Deba

+0

@Deba: 'OnRowCreated =" gv_OnRowCreated "'を追加しましたか? –

+0

yes @Tim Schmelter – Deba

関連する問題