根据用户输入生成中继器

本文关键字:中继器 输入 用户 | 更新日期: 2023-09-27 18:26:12

我的网页上有一个DataList控件,其中的行由ItemTemplate填充。每一行都有一个复选框,单击按钮时,我将生成一个字符串,它实际上是一个sql查询文本。

查询从DB返回的每个结果都有10行,这些行将显示在另一个DataList中,如下所示:

<Header>
Item1: Result1
Item2: Result2
Item3: Result3
...
Item10: Result10

问题是,我不知道有多少复选框会被用户选中,并且根据返回的结果数量是未知的。因此,如果用户从第一个DataList中选择了两个复选框,那么结果DataList应该有两列:

<Header1>                  <Header2>
Item1: Result1    | Item 1: ResultCol2
Item2: Result2    | Item 2: ResultCol2
Item3: Result3    | Item 3:ResultCol2
...
Item10: Result10 | Item 10: ResultCol2

我试着想办法解决这个问题。假设用户选择两个复选框:

foreach checkbox selected by the user
    Make a new repeater. Add a new header. 
    Fetch the data from the database (Each result contains 10 columns) and bind to the repeater.
    Add the repeater to a container on the web page.

现在,我记得在windows窗体中,添加运行时生成的控件可以通过TableLayout.Add(childElements) 之类的方法来完成

但是,我想不出在Web窗体中有类似的东西。这真的是正确的方法吗?在这种情况下,如何实现DataControl的这种动态构建?

根据用户输入生成中继器

如果您想获得计数。我会为此写一个Lambda表达式:

var selectedChkboxCount = DataList1.Items.Cast<DataListItem>().
                          Where(s => ((CheckBox)s.FindControl("checkboxName")).Checked).Count();