标签: dynamic-controls

在flowlayoutpanel中动态添加控件

在Windows窗体中,我可以通过执行以下操作动态添加控件:

for (int i = 0; i < 5; i++)
{
    Button button = new Button();
    button.Location = new Point(160, 30 * i + 10);

    button.Tag = i;
    this.Controls.Add(button);
}
Run Code Online (Sandbox Code Playgroud)

如何动态添加控件FlowLayoutPanel

c# dynamic-controls flowlayoutpanel winforms

25
推荐指数
1
解决办法
6万
查看次数

从面板中删除动态控件

我在Windows窗体的面板上动态生成控件,我还生成了一个用于删除控件的按钮,所有控件都在行中.

int c = 0;
private void button1_Click(object sender, EventArgs e)
{
    int v;
    v = c++;
    panel1.VerticalScroll.Value = VerticalScroll.Minimum;
    ComboBox combo = new ComboBox();
    combo.Name = "combobox" + v ;
    combo.Location = new Point(30, 5 + (30 * v));

    ComboBox combo2 = new ComboBox();
    combo2.Name = "combobox2" + v ;
    combo2.Location = new Point(170, 5 + (30 * v));

    TextBox txt = new TextBox();
    txt.Name = "txtbx" + v;
    txt.Location = new Point(300, 5 + (30 * v));

    TextBox …
Run Code Online (Sandbox Code Playgroud)

c# panel dynamic-controls winforms

19
推荐指数
2
解决办法
7万
查看次数

flowlayout控件在winforms中继续向错误的方向添加控件

我在winforms中有一个flowlayout控件,我已将其流向设置为TopDown,但它从左到右依次添加控件,autoscroll也设置为true.

flowLayoutPanel1.Controls.Clear();    
Label labelInput = new Label();
ListBox listBoxNewInput = new ListBox();

//Initialize label's property
labelInput.Text = " #" + Convert.ToInt32(sequence);
labelInput.AutoSize = true;

//Initialize textBoxes Property
listBoxNewInput.HorizontalScrollbar = false;

listBoxNewInput.Items.Add(efforts);
//Add the newly created text box to the list of input text boxes
inputTextBoxesList.Add(listBoxNewInput);

//Add the labels and text box to the form
flowLayoutPanel1.FlowDirection = FlowDirection.TopDown;
flowLayoutPanel1.Controls.Add(labelInput);
flowLayoutPanel1.FlowDirection = FlowDirection.TopDown;
flowLayoutPanel1.Controls.Add(listBoxNewInput);
Run Code Online (Sandbox Code Playgroud)

c# user-controls dynamic-controls flowlayoutpanel winforms

11
推荐指数
1
解决办法
9152
查看次数

动态更改ASP.Net中的用户控件

我正在尝试创建一个网页,该网页将根据下拉列表的选定值显示适当的用户控件.

基本上页面布局是这样的:

下拉选择
< 基于下拉选择创建的用户控制 >

我有一半工作...当选择改变时控件正在改变.在OnInit()中,我动态创建最后选择的控件(其值以会话状态保存,因为ViewIn在OnInit中不可用).

当发生下拉选择更改时,我删除旧的用户控件,并添加一个新的用户控件. 问题是:从选择更改事件添加新控件后,我无法在第一次回发时保存用户的更改.在第一个回发后,从OnInit而不是Change事件创建所选控件,然后保存状态,直到下一个选择更改.

这是SelectionChanged方法:

protected void SelectionChanged(object sender, EventArgs e)
{
    SelectedValue = int.Parse(DropDownList.SelectedValue);  //Store in Session
    Control userControl = GetSpecificUserControl(SelectedValue);
    PlaceHolder1.Controls.Clear();   // Remove old user control
    PlaceHolder1.Controls.Add(userControl);
}
Run Code Online (Sandbox Code Playgroud)

在SelectionChanged发生后,用户对新控件所做的任何更改都不会保存在以下帖子中.但是,随后的回发会得到保存.此时,控件将在OnInit()中创建.

当控件发生变化时,是否有某种方法可以强制正确的回发和ViewState?控件更改后是否可以强制页面重新初始化?

asp.net dynamic-controls

10
推荐指数
2
解决办法
1万
查看次数

UpdatePanel中的动态创建控件?

我想创建控件,允许用户设计自己的网站结构.我想象里面UpdatePanel是控件(TextBox用于页面名称)和Button'添加到下面'.它看起来像:

|   "Questions" |
| [ add below ] |

|     "Tags"    |
| [ add below ] |

|    "Badges"   |
| [ add below ] |
Run Code Online (Sandbox Code Playgroud)

现在当用户点击"标签"元素中的按钮时,应该在"标签"和"徽章"之间出现新的,具有可编辑的名称,因此用户可以将其命名为"用户".它应该在没有完全回发的情况下完成(以避免页面闪烁).

现在是我的问题:我无法加载onInit中的那些控件(最后不是全部)因为它们不存在,但我必须关注它们的click事件,所以我应该附加事件监听器在Init阶段应该做什么.如何实现所描述的功能?

我玩了太多时间,我很困惑.我会很感激任何提示.

asp.net dynamic-controls

7
推荐指数
1
解决办法
2万
查看次数

在用户控件中的数据列表中触发下拉事件时,动态添加的控件将被删除

我正在开发一个ASP.NET VB.NET Web表单 - 一个预订Web应用程序,其中只有一个aspx页面和其余部分是用户控制页面.

在aspx页面的运行时,用户控件按步骤加载,名称在db中定义,如下面的链接.

ASP.NET自定义用户控件动态添加

在第一步中,第一个用户控件是在page-init中绑定,用于显示.NET datalist控件中的预留可用性详细信息(参见图像).

在此输入图像描述

绑定所有细节以通过data-list的item_databound事件生成运行时控件.

  1. ImageOfRoom(asp.net图像控件) - 点击弹出窗口将打开滚动功能
  2. 名称(直接数据绑定)
  3. 设施(图标) - 从db动态添加.
  4. No. of room as per room type (asp.net dropdown control) - dynamically add from db and on selected index changed, need another dropdown bind in same row and on change of adult dropdown price will vary.
  5. Total price (direct databound)
  6. Book now (button)

在此输入图像描述

Now issue is whenever any event of datalist(click on romm-image or dropdown selected index changed) fired, the dynamic control remove …

vb.net asp.net user-controls datalist dynamic-controls

7
推荐指数
1
解决办法
2202
查看次数

.NET 4.5 WebForms:我(仍然)真的必须在FormView中指定所有3个模板吗?

研究ASP.NET 4.5 WebForms中新的强类型,模型绑定方法:

Scott Hanselman的 WebForms模型绑定示例(以及其他)中,我看到使用在"编辑"模式下打开的FormView,其中包含一些DynamicControls 例如

<asp:FormView runat="server" ID="MyForm" ... DefaultMode="Edit">
  <EditItemTemplate>
    <asp:DynamicControl runat="server" ID="Field1" DataField="Field1" Mode="Edit" />
    <asp:DynamicControl runat="server" ID="Field2" DataField="Field2" Mode="Edit" />
  </EditItemTemplate>
</asp:FormView> 
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我的FormView ItemTemplate,EditItemTemplate并且InsertItemTemplate将是相同的,除了ItemTemplate的控件将处于"ReadOnly"模式.

我(仍)确实需要在FormView中提供三个几乎完全相同的模板副本吗?

我很高兴使用DynamicControls,但是这里的团队永远不会采用FormView所需的"3x复制粘贴"方法,特别是对于我们的大型模板.

我原以为可能:

  • DynamicControls可以从包含FormView获取"模式"吗?
  • 我可以使用FormView以外的东西来包含我的DynamicControls?
  • 我应该在代码隐藏中管理DynamicControls的模式以避免模板重复吗?

任何例子/想法?

asp.net webforms dynamic-controls model-binding asp.net-4.5

6
推荐指数
1
解决办法
1195
查看次数

将动态控件插入控件集合的中间

这是我的第一篇文章!我非常绝望,所以我超越了标准的谷歌搜索.我相信这是一个高级或专家级的.NET问题.

问题是我构建了一个.NET Web应用程序,它需要能够动态地将用户控件插入到列表中间.我对动态控件非常熟悉这么长时间他们只需要添加到列表的末尾(即:我熟悉这样的文章:http://msdn.microsoft.com/en-us/library/ ms972976.aspx).但是,如果我需要将一个UserControl添加到Controls集合的前面或中间的某个地方,那么由于控件的UniqueID被抛弃,我几乎丢失了.

作为一个简化的例子,假设我有一个Panel,我正在添加一个名为MyControl.ascx的UserControl列表.我还有一些事件可以在页面上触发,需要动态地将MyControl.ascx插入到面板的Controls集合的指定索引中.我还需要在MyControl.ascx上有一个或多个事件我需要订阅.这意味着需要在这些控件上的事件触发之前加载控件,否则它们将不会触发.如果你不知道我所指的是什么,那么我要么说问题不好,要么这个问题可能对你来说太难了:)

下面是一些C#伪代码来演示这个问题.问题是Controls.AddAt(索引,控制)方法不会相应地调整控件的UniqueID值.例如,请考虑Controls集合中的以下控件:

无论我是否实际编写直接依赖于UniqueID的代码,.NET间接使用UniqueID将在先前回发上触发的事件链接在一起,并在新的回发上加载控件.以前面的例子为例:

在最初 Page Load (Page.IsPostback == false)

<table>
  <tr>
    <td width='100'>Control index</td>
    <td width='75'>UniqueID</td>
    <td>Value</td>
  </tr>
  <tr>
    <td>0</td>
    <td>ctl00</td>
    <td>value1</td>
  </tr>
  <tr>
    <td>1</td>
    <td>ctl01</td>
    <td>value2</td>
  </tr>
  <tr>
    <td>2</td>
    <td>ctl02</td>
    <td>value3</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

Page.IsPostback == false某个其他控件想要在索引0处插入控件的回发()之后:

如果我这样做,Controls.AddAt(0, newControl)那么Controls集合看起来像这样:

<table>
  <tr>
    <td width='100'>Control index</td>
    <td width='75'>UniqueID</td>
    <td>Value</td>
  </tr>
  <tr>
    <td>0</td>
    <td>ctl03</td>
    <td>value0  <== the controls' unique IDs do not shift!</td>
  </tr>
  <tr>
    <td>1</td>
    <td>ctl00</td>
    <td>value1</td>
  </tr>
  <tr>
    <td>2</td> …
Run Code Online (Sandbox Code Playgroud)

c# asp.net user-controls dynamic-controls

5
推荐指数
1
解决办法
7716
查看次数

基于用户回发的动态控件

假设我有一个树视图,其中每个树节点包含一组不同用户控件的 id。当用户点击一个节点时,这些控件应该被加载到页面中。据我了解 ASP 页面生命周期,应在初始化阶段添加动态控件,稍后将触发回发事件。

那么如果在我需要添加控件之后发生treeview点击事件,我该如何根据用户回发事件动态添加控件呢?


编辑:我尝试了 ArronLS 的建议:

我所做的是将节点值添加到会话数组中,并在我执行 init 时使用它来选择要加载到占位符控件的控件的表单元素。在 treeview 单击事件中,我更新会话数组中的节点,清除占位符中的旧表单元素,并将新表单元素添加到控件中。当页面再次加载时,它现在应该在初始化时找到节点,这样就可以避免视图状态问题。

现在我还没有完全测试这个,但是还有另一个类似的帖子讨论了视图状态可能导致的问题。他们提出了一个解决方案,在 Init 控件中轮询上下文的 Request[] 部分(在他们的情况下是 dropbox),手动处理一些回发功能。

我的新问题是如何使用请求数组访问树视图中的选定节点?

c# asp.net event-handling dynamic-controls

5
推荐指数
1
解决办法
1557
查看次数

动态创建控件并在回发中保存控件值 - ASP.Net C#

考虑一下 -

我允许最终用户通过获取一些细节在ASP.Net页面中动态创建选项卡控件.对于添加的每个标签,我都会得到一些设置 -

  1. 标签标题
  2. 标签内容
  3. 标签页脚链接

所以我得到每个标签的这些细节.用户向另外一个选项卡提供了一个"添加标签"按钮.因此,我需要在页面中添加一个标签设置面板以获取标签设置.但是这样做,我丢失了先前创建的动态标签设置面板中输入的值.用户可以添加任意数量的选项卡,并为每个选项卡输入设置.最后,当他们保存它时,我构建了tab控件(基于他们的设置和内容),然后我渲染控件.

由于控件是动态的,我可以选择两种方式 -

  1. 添加第n个选项卡时,重新创建先前创建的n - 1选项卡设置面板.因此,在每个回发中,我需要为每个选项卡重新创建设置面板.但我不知道如何坚持这种情况下的价值观.
  2. 使用简单的html控件在客户端添加设置面板,并在页面上UnLoad解析控件 - >解析设置 - >将其保存在隐藏字段中 - >在服务器端获取它.在这种情况下,我失去了所有服务器端功能,我需要为控件编写验证脚本.

有关如何更好地做到这一点的任何见解?

c# asp.net dynamic-controls

5
推荐指数
1
解决办法
9405
查看次数