动态添加控件以更新面板 [英] Dynamically add controls to update panel

查看:69
本文介绍了动态添加控件以更新面板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,



我想动态添加控件到更新面板,它们会被添加,但它们没有显示出来。以下是我的代码详情。



设计师:

< asp:UpdatePanel ID =   upRequirement runat =   server UpdateMode =  始终 >  
< ContentTemplate>
< asp:Button ID = btnAdd runat = server Text = + CssClass = button OnClick = btnAdd_Click />
< / ContentTemplate >
<触发器>
< asp:AsyncPostBackTrigger ControlID = btnAddRequirement />
< / 触发器 >
< / asp:UpdatePanel >





Codebehind:

我也试过将代码移到 Page_OnInit 方法但仍然没有运气。

此代码位于 Page_Load 方法内。

 < span class =code-keyword> int  count = upRequirement.ContentTemplateContainer.Controls.Count; 
foreach (需求req in Req)
{
Panel pnlReq = new Panel();
pnlReq.ID = pnl + req.Id;
pnlReq.Width = Unit.Percentage( 100 );
pnlReq.Visible = true ;
Label lblReq = new Label();
lblReq.ID = lbl + req.Id;
lblReq.Text = req.Content;
lblReq.Visible = true ;
Image imgReq = new Image();
imgReq.ID = img + req.Id;
CollapsiblePanelExtender pnlExtReq = new CollapsiblePanelExtender();
pnlExtReq.ID = pnlExt + req.Id;
pnlExtReq.TargetControlID = pnlReq.ID;
pnlExtReq.CollapsedSize = 0 ;
pnlExtReq.ExpandedSize = 300 ;
pnlExtReq.Collapsed = true ;
pnlExtReq.AutoCollapse = false ;
pnlExtReq.AutoExpand = false ;
pnlExtReq.ScrollContents = true ;
pnlExtReq.CollapsedText = 显示详情......;
pnlExtReq.ExpandedText = 隐藏详细信息......;
pnlExtReq.ImageControlID = imgReq.ID;
pnlExtReq.ExpandedImage = 〜/ Images / Col1.jpeg;
pnlExtReq.CollapsedImage = 〜/ Images / Exp1.jpeg;
pnlExtReq.ExpandDirection = CollapsiblePanelExpandDirection.Vertical;
pnlReq.Controls.Add(pnlExtReq);
upRequirement.ContentTemplateContainer.Controls.Add(pnlReq);
upRequirement.ContentTemplateContainer.Controls.Add( new LiteralControl( < br />));
}
count = upRequirement.ContentTemplateContainer.Controls.Count;





如你所见我测试的数字变量计数中的控件数。循环后计数增加但页面加载控件时不可见。有人帮我找到了什么问题?在此先感谢。

解决方案

您需要在更新面板中占用占位符。试试这个:

HTML:

 <   asp:updatepanel     id   =  upRequirement    runat   =  server    updatemode   = 始终    xmlns:asp   = < span class =code-keyword>#unknown >  
< contenttemplate >
< asp:占位符 id = PlaceHolder1 runat = server >
< / asp:placeholder >
< asp:按钮 id = btnAdd runat = server text = + cssclass = < span class =code-keyword> button onclick = btnAdd_Click / >
< / contenttemplate >
< 触发器 >
< asp:asyncpostbacktrigger controlid = btnAddRequirement / >
< ; /触发器 >
< / asp:updatepanel >



代码隐藏(C#) - PreInIt事件:

  int  count = upRequirement.ContentTemplateContainer.Controls.Count; 
foreach (需求req in Req)
{
Panel pnlReq = new Panel();
pnlReq.ID = pnl + req.Id;
pnlReq.Width = Unit.Percentage( 100 );
pnlReq.Visible = true ;
Label lblReq = new Label();
lblReq.ID = lbl + req.Id;
lblReq.Text = req.Content;
lblReq.Visible = true ;
Image imgReq = new Image();
imgReq.ID = img + req.Id;
CollapsiblePanelExtender pnlExtReq = new CollapsiblePanelExtender();
pnlExtReq.ID = pnlExt + req.Id;
pnlExtReq.TargetControlID = pnlReq.ID;
pnlExtReq.CollapsedSize = 0 ;
pnlExtReq.ExpandedSize = 300 ;
pnlExtReq.Collapsed = true ;
pnlExtReq.AutoCollapse = false ;
pnlExtReq.AutoExpand = false ;
pnlExtReq.ScrollContents = true ;
pnlExtReq.CollapsedText = 显示详情......;
pnlExtReq.ExpandedText = 隐藏详细信息......;
pnlExtReq.ImageControlID = imgReq.ID;
pnlExtReq.ExpandedImage = 〜/ Images / Col1.jpeg;
pnlExtReq.CollapsedImage = 〜/ Images / Exp1.jpeg;
pnlExtReq.ExpandDirection = CollapsiblePanelExpandDirection.Vertical;
pnlReq.Controls.Add(pnlExtReq);
upRequirement.ContentTemplateContainer.Controls.Add(pnlReq);
upRequirement.ContentTemplateContainer.Controls.Add( new LiteralControl( < br />));
PlaceHolder1.Controls.Add(pnlReq);
PlaceHolder1.Controls.Add( new LiteralControl( < br />));
}
count = upRequirement.ContentTemplateContainer.Controls.Count;







--Amit


Hello all,

I want to add controls dynamically to a update panel, they are getting added but they are not getting displayed. Below is my code details.

The designer:

<asp:UpdatePanel ID="upRequirement" runat="server" UpdateMode="Always">
   <ContentTemplate>
      <asp:Button ID="btnAdd" runat="server" Text="+" CssClass="button" OnClick="btnAdd_Click" />
   </ContentTemplate>
   <Triggers>
      <asp:AsyncPostBackTrigger ControlID="btnAddRequirement" />
   </Triggers>
</asp:UpdatePanel>



Codebehind:
I also tried moving the code to Page_OnInit method but still no luck.
This code is inside the Page_Load method.

int count = upRequirement.ContentTemplateContainer.Controls.Count;
foreach(Requirement req in Req)
{
  Panel pnlReq = new Panel();
  pnlReq.ID = "pnl" + req.Id;
  pnlReq.Width = Unit.Percentage(100);
  pnlReq.Visible = true;
  Label lblReq = new Label();
  lblReq.ID = "lbl" + req.Id;
  lblReq.Text = req.Content;
  lblReq.Visible = true;
  Image imgReq = new Image();
  imgReq.ID = "img" + req.Id;
  CollapsiblePanelExtender pnlExtReq = new CollapsiblePanelExtender();
  pnlExtReq.ID = "pnlExt" + req.Id;
  pnlExtReq.TargetControlID = pnlReq.ID;
  pnlExtReq.CollapsedSize = 0;
  pnlExtReq.ExpandedSize = 300;
  pnlExtReq.Collapsed = true;
  pnlExtReq.AutoCollapse = false;
  pnlExtReq.AutoExpand = false;
  pnlExtReq.ScrollContents = true;
  pnlExtReq.CollapsedText = "Show details...";
  pnlExtReq.ExpandedText = "Hide details...";
  pnlExtReq.ImageControlID = imgReq.ID;
  pnlExtReq.ExpandedImage = "~/Images/Col1.jpeg";
  pnlExtReq.CollapsedImage = "~/Images/Exp1.jpeg";
  pnlExtReq.ExpandDirection = CollapsiblePanelExpandDirection.Vertical;
  pnlReq.Controls.Add(pnlExtReq);
  upRequirement.ContentTemplateContainer.Controls.Add(pnlReq);
  upRequirement.ContentTemplateContainer.Controls.Add(new LiteralControl("<br />"));
}
count = upRequirement.ContentTemplateContainer.Controls.Count;



As you can see I test the number of controls in the variable count. The count is getting increased after the loop but when the page loads controls are not visible. What is the problem can someone help me find it? Thanks in advance.

解决方案

You need to take a place holder in your update panel. Try this:
HTML:

<asp:updatepanel id="upRequirement" runat="server" updatemode="Always" xmlns:asp="#unknown">
   <contenttemplate>
      <asp:placeholder id="PlaceHolder1" runat="server">
      </asp:placeholder>
      <asp:button id="btnAdd" runat="server" text="+" cssclass="button" onclick="btnAdd_Click" />
   </contenttemplate>
   <triggers>
      <asp:asyncpostbacktrigger controlid="btnAddRequirement" />
   </triggers>
</asp:updatepanel>


Code Behind(C#) -- PreInIt Event:

int count = upRequirement.ContentTemplateContainer.Controls.Count;
foreach(Requirement req in Req)
{
  Panel pnlReq = new Panel();
  pnlReq.ID = "pnl" + req.Id;
  pnlReq.Width = Unit.Percentage(100);
  pnlReq.Visible = true;
  Label lblReq = new Label();
  lblReq.ID = "lbl" + req.Id;
  lblReq.Text = req.Content;
  lblReq.Visible = true;
  Image imgReq = new Image();
  imgReq.ID = "img" + req.Id;
  CollapsiblePanelExtender pnlExtReq = new CollapsiblePanelExtender();
  pnlExtReq.ID = "pnlExt" + req.Id;
  pnlExtReq.TargetControlID = pnlReq.ID;
  pnlExtReq.CollapsedSize = 0;
  pnlExtReq.ExpandedSize = 300;
  pnlExtReq.Collapsed = true;
  pnlExtReq.AutoCollapse = false;
  pnlExtReq.AutoExpand = false;
  pnlExtReq.ScrollContents = true;
  pnlExtReq.CollapsedText = "Show details...";
  pnlExtReq.ExpandedText = "Hide details...";
  pnlExtReq.ImageControlID = imgReq.ID;
  pnlExtReq.ExpandedImage = "~/Images/Col1.jpeg";
  pnlExtReq.CollapsedImage = "~/Images/Exp1.jpeg";
  pnlExtReq.ExpandDirection = CollapsiblePanelExpandDirection.Vertical;
  pnlReq.Controls.Add(pnlExtReq);
  upRequirement.ContentTemplateContainer.Controls.Add(pnlReq);
  upRequirement.ContentTemplateContainer.Controls.Add(new LiteralControl("<br />"));
  PlaceHolder1.Controls.Add(pnlReq);
  PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
}
count = upRequirement.ContentTemplateContainer.Controls.Count;




--Amit


这篇关于动态添加控件以更新面板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆