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为零,因此不会重新创建以前的控件。我应该为其执行什么操作。浏览链接。。
你为什么要分手;在你的代码里?