2014-02-11 3 views
2

У меня есть одно текстовое поле на странице и DataList.
Теперь, когда пользователь вводит любое целое число в текстовое поле и нажимает кнопку, тогда один и тот же источник данных будет генерировать число раз.

Иными словами, если пользователь вводит 5, то datalist будет генерировать 5 раз. datalist содержит те же данные.

Я не понимаю, как это сделать? Пожалуйста, помогите мне решить эту проблему.Генерирует 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> 

Итак, я хочу копию DataList 5 раз, если пользователь вводит, например 5.

+0

В чем проблема? –

+0

@ArsenMkrt "ru Пользователь вводит любое целое число в текстовом поле и нажимает кнопку, тогда один и тот же источник данных будет генерировать число раз. Я не понимаю, как это сделать?" - он хочет создать список данных (как в своем примере нижнего кода) с количеством элементов, которое равно числу, введенному пользователем в текстовое поле. –

+0

это поможет, http: //www.codeproject.com/Questions/370784/How-To-Create-Dynamically-datalist – ankur

ответ

0

использовать ретранслятор, каждый элемент которого является 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 элементов источнику данных повторителя

+0

Я не хочу 10 предметов. Я хочу, чтобы копия Datalist 10 раз, если пользователь вводит, например, 10. –

+0

вы можете сохранить ссылку со всех 10 элементов на один и тот же файл данных, это имеет смысл? –

+0

У меня нет идеи, поэтому я разместил здесь свой вопрос. Но мне нужна копия данных. –

0

Кажется, вы должны генерировать DataList динамически. Если DataList будет содержать одни и те же данные, вы можете создать только один источник данных, который вам известен.

Для моего образца я бы использовал SqlDataSource в качестве источника данных и передал его другим листам данных. Если вы создадите шаблон для DataList (например, мой dtlTemplate), также определите элемент <ItemTemplate>, это будет проще.

<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(); 
    } 
} 

Я надеюсь, что это поможет.

Смежные вопросы