Как повторно использовать элементы списка для элементов управления asp: DropDownList? - PullRequest
2 голосов
/ 07 июля 2011

У меня есть страница .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?

Ответы [ 4 ]

2 голосов
/ 07 июля 2011

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

В будущем эта стратегия будет хорошо преобразована в вызов db ...

В веб-форме

<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;
        }
    }
}
1 голос
/ 07 июля 2011

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

0 голосов
/ 07 июля 2011

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

0 голосов
/ 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...