Как повторно использовать элементы списка для элементов управления asp: DropDownList?

У меня есть страница .aspx, которая содержит два элемента управления <asp:DropDownList>, которые заполнены статическими элементами, например:

<asp:DropDownList ID="ddl1" ...>
    <asp:ListItem Value="A" Text="..." />
    <asp:ListItem Value="B" Text="..." />
    ....
    <asp:ListItem Value="X" Text="..." />
</asp:DropDownList>

.....

<asp:DropDownList ID="ddl2" ...>
    <asp:ListItem Value="A" Text="..." />
    <asp:ListItem Value="B" Text="..." />
    ....
    <asp:ListItem Value="X" Text="..." />
</asp:DropDownList>

Пункты списка для ddl1 и ddl2 одинаковы. Таким образом, я хотел бы использовать их повторно и удалить дублирование.

Я мог бы заполнить комбо в коде за .aspx.cs, но я действительно не хочу, чтобы там были какие-то тупые данные, заполняющие простые комбо. Я просто хочу, чтобы там была логика страницы.

Есть ли способ возобновить элементы списка внутри .aspx?


person meme    schedule 07.07.2011    source источник


Ответы (4)


Создайте класс для представления данных в DDL, а затем вызовите метод get. Используйте один и тот же ObjectDataSource для обоих DDL или используйте отдельные ObjectDataSource. Вы можете оптимизировать класс для использования статических членов, но, вероятно, это излишне.

Эта стратегия прекрасно могла бы преобразоваться в вызов БД в будущем ...

В веб-форме:

<asp:ObjectDataSource ID="obj1" runat="server"
    TypeName="WebApplication1.Data.MyDdlItem"
    SelectMethod = "GetAll" />
<asp:DropDownList ID="ddl1" runat="server" DataSourceID="obj1" DataTextField="Name" DataValueField="Id" />
<asp:DropDownList ID="ddl2" runat="server" DataSourceID="obj1" DataTextField="Name" DataValueField="Id" />

Соответствующий объект:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication1.Data
{
    public class MyDdlItem
    {
        public string Id { get; set; }
        public string Name { get; set; }

        public static List<MyDdlItem> GetAll()
        {
            List<MyDdlItem> list = new List<MyDdlItem>();
            list.Add(new MyDdlItem { Id = "1", Name = "Option 1" });
            list.Add(new MyDdlItem { Id = "2", Name = "Option 2" });
            list.Add(new MyDdlItem { Id = "3", Name = "Option 3" });
            list.Add(new MyDdlItem { Id = "4", Name = "Option 4" });
            return list;
        }
    }
}
person Brett    schedule 07.07.2011

Просто создайте datatable и свяжите оба раскрывающихся списка с одним и тем же datatable.

person Ovais Khatri    schedule 07.07.2011

Почему бы вам не использовать массив сценариев Java, чтобы позже связать их с обоими раскрывающимися списками?

<script>
  var arr = new Array(new Array('A','value1'),new Array('B','value2'),new Array('C','value3'));
var elem = document.getElementById("ddl1");
var elem1 = document.getElementById("ddl2");
 for(i=0;i<arr.length;i++)
 {
    elem.add(new Option(arr[i][0, 1], arr[i][0, 0]),false);
    elem1.add(new Option(arr[i][0, 1], arr[i][0, 0]),false);
 }
</script>
person MuthuKumaran    schedule 07.07.2011
comment
Потому что это вызывает другие проблемы (stackoverflow.com/questions/228969/), и мне не нужна возня - person meme; 08.07.2011

Попробуйте что-нибудь вроде ddl2.DataSource=ddl1.DataSource, а затем, когда ddl1 получит все свои элементы, ddl2 тоже должен.

person Gage    schedule 07.07.2011