C# 我想在动态gridview单元格内单击按钮时创建动态文本框和图像按钮

C# 我想在动态gridview单元格内单击按钮时创建动态文本框和图像按钮,c#,C#,我编写了如下代码: protected void Page_Load(object sender, EventArgs e) { Literal lt; Label lb; //Get ContentPlaceHolder ContentPlaceHolder content = (ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolder1"); int rowIndex = 0;

我编写了如下代码:

protected void Page_Load(object sender, EventArgs e)
{
    Literal lt;
    Label lb;
    //Get ContentPlaceHolder
    ContentPlaceHolder content = (ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolder1");

    int rowIndex = 0;

    if (ViewState["CurrentTable"] != null)
    {
        DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];

        if (dtCurrentTable.Rows.Count > 0)
        {
            for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
            {
                pnlStartDate = new Panel();
                pnlStartDate.ID = "pnlStartDate";
                // pnlStartDate.BorderWidth = 1;
                pnlStartDate.Width = 100;
                grvWorkOrder.Rows[rowIndex].Cells[13].Controls.Add(pnlStartDate);
                lt = new Literal();
                lt.Text = "<br />";
                grvWorkOrder.Rows[rowIndex].Cells[13].Controls.Add(lt);

                //Button To add TextBoxes
                Button btnAddTxt = new Button();
                btnAddTxt.ID = "btnAddTxt";
                btnAddTxt.Text = "Add TextBox";
                btnAddTxt.CausesValidation = false;
                btnAddTxt.Click += new System.EventHandler(btnAddTextbox_Click);
                grvWorkOrder.Rows[rowIndex].Cells[10].Controls.Add(btnAddTxt);

                if (IsPostBack)
                {
                    RecreateDateControls("txtStartDateDynamic", "TextBox", "img1StartDateDynamic", "ImageButton", "ceStartDateDynamic", "CalendarExtender");
                }

                rowIndex++;
            }
        }
    }
}

protected void btnAddTextbox_Click(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    if (btn.ID == "btnAddTxt")
    {
        Literal lt = new Literal();
        lt.Text = "<br />";

        int cntStartDate = FindOccurence("txtStartDateDynamic");
        TextBox txt4 = new TextBox();
        txt4.ID = "txtStartDateDynamic-" + Convert.ToString(cntStartDate + 1);
        txt4.Width = 90;
        pnlStartDate.Controls.Add(txt4);

        int cntImgStartDate = FindOccurence("img1StartDateDynamic");

        ImageButton img1StartDateDynamic = new ImageButton();
        img1StartDateDynamic.ID = "img1StartDateDynamic-" + Convert.ToString(cntImgStartDate + 1);
        img1StartDateDynamic.ImageUrl = "Images/calender.jpg";
        img1StartDateDynamic.Width = 25;
        img1StartDateDynamic.CausesValidation = false;
        pnlStartDate.Controls.Add(img1StartDateDynamic);

        int cntCeStartDate = FindOccurence("ceStartDateDynamic");
        CalendarExtender ceStartDateDynamic = new CalendarExtender();
        ceStartDateDynamic.ID = "ceStartDateDynamic-" + Convert.ToString(cntCeStartDate + 1);
        ceStartDateDynamic.Enabled = true;
        ceStartDateDynamic.TargetControlID = "txtStartDateDynamic-" + Convert.ToString(cntCeStartDate + 1);
        ceStartDateDynamic.PopupButtonID = "img1StartDateDynamic-" + Convert.ToString(cntCeStartDate + 1);
        ceStartDateDynamic.Format = "yyyy/MM/dd";
        pnlStartDate.Controls.Add(ceStartDateDynamic);

        pnlStartDate.Controls.Add(lt);
    }
}

private int FindOccurence(string substr)
{
    string reqstr = Request.Form.ToString();
    return ((reqstr.Length - reqstr.Replace(substr, "").Length) / substr.Length);
}

private void RecreateDateControls(string ctrlPrefix1, string ctrlType1, string ctrlPrefix2, string ctrlType2, string ctrlPrefix3, string ctrlType3)
{
    string[] ctrls1 = Request.Form.ToString().Split('&');
    string[] ctrls2 = Request.Form.ToString().Split('&');
    string[] ctrls3 = Request.Form.ToString().Split('&');

    int cnt1 = FindOccurence(ctrlPrefix1);
    int cnt2 = FindOccurence(ctrlPrefix2);
    int cnt3 = FindOccurence(ctrlPrefix3);
    if (cnt1 > 0 && cnt2 > 0 && cnt3 > 0)
    {
        Literal lt;
        for (int k = 1; k <= cnt1; k++)
        {
            for (int i = 0; i < ctrls1.Length ; i++)
            {
                if (ctrls1[i].Contains(ctrlPrefix1 + "-" + k.ToString())) 
                {
                    string ctrlName1 = ctrls1[i].Split('=')[0];
                    string ctrlValue1 = ctrls1[i].Split('=')[1];

                    if (ctrls1[i].Contains(ctrlPrefix2 + "-" + k.ToString()))
                    {
                        string ctrlName2 = ctrls1[i].Split('=')[0];

                        if (ctrls1[i].Contains(ctrlPrefix3 + "-" + k.ToString()))
                        {
                            string ctrlName3 = ctrls1[i].Split('=')[0];


                            if (ctrlType1 == "TextBox" && ctrlPrefix1 == "txtStartDateDynamic" && ctrlType2 == "ImageButton" && ctrlPrefix2 == "img1StartDateDynamic" && ctrlType3 == "CalendarExtender" && ctrlPrefix3 == "ceStartDateDynamic")
                            {
                                TextBox txt4 = new TextBox();
                                txt4.ID = ctrlName1;
                                txt4.Text = ctrlValue1;
                                txt4.Width = 90;
                                pnlStartDate.Controls.Add(txt4);

                                ImageButton img1StartDateDynamic = new ImageButton();
                                img1StartDateDynamic.ID = ctrlName2;
                                img1StartDateDynamic.ImageUrl = "Images/calender.jpg";
                                img1StartDateDynamic.Width = 25;
                                img1StartDateDynamic.CausesValidation = false;
                                pnlStartDate.Controls.Add(img1StartDateDynamic);


                                CalendarExtender ceStartDateDynamic = new CalendarExtender();
                                ceStartDateDynamic.ID = ctrlName3;
                                ceStartDateDynamic.Enabled = true;
                                ceStartDateDynamic.TargetControlID = ctrlName1;
                                ceStartDateDynamic.PopupButtonID = ctrlName2;
                                ceStartDateDynamic.Format = "yyyy/MM/dd";
                                pnlStartDate.Controls.Add(ceStartDateDynamic);



                                lt = new Literal();
                                lt.Text = "<br />";
                                pnlStartDate.Controls.Add(lt);
                            }
                        }
                    }
               }
               break;
            }
        }
    }
}
但问题在于RecreateDateControls函数ImageButton计数器cnt2为零,因此不会重新创建以前的控件。我应该为其执行什么操作。

浏览链接。。

你为什么要分手;在你的代码里?