【问题标题】:Generate datalist number of times生成数据列表次数
【发布时间】:2014-02-11 11:40:07
【问题描述】:

我在页面和 DataList 上有一个文本框。
现在,当用户在文本框中输入任何整数并单击按钮时,将多次生成相同的数据列表。

例如,如果用户输入 5,则 datalist 将生成 5 次。 datalist 包含相同的数据。

我不知道如何做到这一点?请帮我解决这个问题。

<asp:TextBox ID="txtNumber" runat="server"> -> 3

然后它生成Datalist为:

<asp:DataList ID="dl" runat="server"></asp:DataList>
<asp:DataList ID="dl" runat="server"></asp:DataList>
<asp:DataList ID="dl" runat="server"></asp:DataList>

所以,如果用户输入例如 5,我想要复制 DataList 5 次。

【问题讨论】:

  • @ArsenMkrt "en 用户在文本框中输入任何整数并单击按钮,然后将多次生成相同的数据列表。我不知道如何执行此操作?" - 他想生成一个数据列表(如在他的底部代码示例中),其中包含的项目数等于用户在文本框中输入的数字。
  • @BenjaminGruenbaum,是的仪式。您可以说用户在文本框中输入数字的次数相同的数据列表副本。
  • @ArsenMkrt,我不知道该怎么做。
  • @JeetenParmar,检查我的答案

标签: c# asp.net dynamic datalist


【解决方案1】:

使用repeater,每一项都是DataList

<asp:Repeater id="Repeater1" runat="server">
      <HeaderTemplate>
         <table>
      </HeaderTemplate>

      <ItemTemplate>
         <tr>
            <asp:DataList ID="dl" runat="server" DataSource = '<%# DataBinder.Eval(Container.DataItem, "MyCollectionProperty") %>' />
         </tr>
      </ItemTemplate>

      <FooterTemplate>
         </table>
      </FooterTemplate>

</asp:Repeater>

当用户输入例如 10 时,生成 10 个项目,每个项目包含需要显示的项目集合(例如 MyCollectionProperty 属性),并将 10 个项目的数组分配给转发器数据源

【讨论】:

  • 我不想要 10 件商品。如果用户输入例如 10,我想要 Datalist 的副本 10 次。
  • 你可以保留所有 10 个元素对同一个数据项的引用,这有意义吗?
  • 我不知道这就是为什么我在这里发布我的问题。但我想要数据副本。
  • 您不一定需要复制数据,没有人阻止您在数组中保留10个相同项目的样本并传递给repeater
【解决方案2】:

似乎您会动态生成 DataList。 如果DataList会包含相同的数据,那么你可以只创建一个你熟悉的数据源。

对于我的示例,我将使用 SqlDataSource 作为我的数据源并将其共享给其他 DataList。 如果为DataList创建模板(比如我的dtlTemplate),同时定义&lt;ItemTemplate&gt;元素,会更简单。

<form id="form1" runat="server">
<asp:TextBox ID="txtNumber" runat="server">
<asp:Button ID="btnOK" runat="server" Text="Button" OnClick="btnOK_Click"/><br />

<asp:DataList Visible="false" ID="dtlTemplate" runat="server" DataKeyField="id" 
    DataSourceID="dataSource" Width="845px">
    <ItemTemplate>
       id:<asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>' /><br />
       name:<asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>' /><br />
    </ItemTemplate>
</asp:DataList>

<asp:SqlDataSource ID="dataSource" runat="server" 
     ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
     SelectCommand="SELECT * FROM [Table]"></asp:SqlDataSource>
</form>

在您的按钮单击处理程序中应该是这样的:

protected void btnOK_Click(object sender, EventArgs e)
{
    int number = int.Parse(txtNumber.Text == "" ? "0" : txtNumber.Text);
    for (int i = 0; i < number; i++)
    {
        //Create new DataList with copying ItemTemplate from dtlTemplate
        DataList dtl = new DataList();
        dtl.ID = "dtl" + i;
        dtl.ItemTemplate = dtlTemplate.ItemTemplate;

        //Add new DataList to form1 (parent control)
        form1.Controls.Add(dtl);

        //Set the same data source with dtlTemplate to new DataList
        dtl.DataSourceID = dtlTemplate.DataSourceID;
        dtl.DataBind();
    }
}

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多