根据用户输入生成中继器

时间:2012-02-29 16:07:02

标签: c# asp.net

我的网页上有一个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的这种动态构建?

1 个答案:

答案 0 :(得分:0)

如果你想得到点数。我会写一个Lambda表达式:

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