0

グリッドビューには複数の行と列があり、各セルには Excel と同様にテキスト ボックスとバリデータ コントロールがあります。列は動的に生成され、すべてのテキスト ボックスをクリアしたいと思います。

これは機能していません。どこで間違っているのですか

protected void btnClear_Click(object sender, EventArgs e)
{
 if(gvMain.Rows.Count > 0)
  {
    foreach(GridViewRow gvr in gvMain.Rows)
     {
       foreach(TableCell tc in gvr.Cells)
        {
           if(tc.HasControls())
            {
              for(int i=0;i<tc.Controls.Count;i++)
               {
                 if(tc.Controls[i] is TextBox)
                   {
                     TextBox tb = (TextBox)tc.Controls[i];
                      tb.Text= "";
                   }
               }
            }
        }
     }
  }
}
4

4 に答える 4

2

これが解決策です。私はすでにこれを試しましたが、うまくいきました。

     foreach (GridViewRow row in GridView1.Rows)
        {
            foreach (TableCell cell in row.Cells)
            {
                foreach (var control in cell.Controls)
                {
                    var box = control as TextBox;
                    if (box != null )
                    {
                        box.Text = string.Empty;
                    }
                }
            }
        }

これが役立つことを願っています

于 2013-11-14T04:59:15.097 に答える
0

以下のコードを試してください:

foreach(GridViewRow r in GridView.Rows)
{
   TextBox txtbox = (TextBox)r.FindControl("Id of TextBox");
   txtbox.Text = "";
} 

ありがとう

于 2013-11-13T13:09:39.010 に答える
0

基本的に問題は、ポストバック時に動的コントロールを再作成する必要があることです。ポストバック中に Page_Init の各行に動的コントロールを再度追加する限り、ViewState はコントロール プロパティ (Text、Visible など) の入力を処理する必要があります。

あるいは、RowCreated でコントロールを作成し、RowDataBound でデフォルト値を割り当てると、動的コントロールも保持されます。簡略版は次のとおりです。

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        gvTest.DataSource = new int[] { 1, 2, 3 };
        gvTest.DataBind();
    }
}

protected void gvTest_RowCreated(object sender, GridViewRowEventArgs e)
{
    //note: e.Row.DataItem will be null during postback
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[0].Controls.Add(new TextBox());
    }
}

protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        var txtBox = (TextBox)e.Row.Cells[0].Controls[0];
        txtBox.Text = e.Row.DataItemIndex.ToString();
    }
}

protected void Clear_Click(object sender, EventArgs e)
{
    foreach (GridViewRow row in gvTest.Rows)
    {
        var txtBox = (TextBox)row.Cells[0].Controls[0];
        //txtBox.Text will have whatever value the user gave it client side
        txtBox.Text = "";
    }
}
于 2013-11-13T15:14:37.740 に答える
0

以下のコードを使用します。

 foreach(GridViewRow gr in GridView.Rows)
    {
       // find your all textbox
       TextBox txtA= (TextBox)gr.FindControl("txtA");
       TextBox txtB= (TextBox)gr.FindControl("txtB");
       //Check they are not null
       if(txtA!=null){
       //Assign empty string
           txtA.Text = string.empty;
           }
       if(txtB!=null){
       //Assign empty string
           txtB.Text = string.empty;
           }
    } 
于 2013-11-13T13:18:07.923 に答える