C# 如何重用asp:DropDownList控件的列表项?
我有一个.aspx页面,其中包含两个C# 如何重用asp:DropDownList控件的列表项?,c#,asp.net,webforms,drop-down-menu,code-reuse,C#,Asp.net,Webforms,Drop Down Menu,Code Reuse,我有一个.aspx页面,其中包含两个控件,其中填充了如下静态项: <asp:DropDownList ID="ddl1" ...> <asp:ListItem Value="A" Text="..." /> <asp:ListItem Value="B" Text="..." /> .... <asp:ListItem Value="X" Text="..." /> </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中的列表项?只需创建一个datatable并将两个下拉列表绑定到同一个datatable。以后为什么不使用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>
var arr=新数组(新数组('A','value1')、新数组('B','value2')、新数组('C','value3');
var elem=document.getElementById(“ddl1”);
var elem1=document.getElementById(“ddl2”);
对于(i=0;i尝试类似于ddl2.DataSource=ddl1.DataSource
的方法,然后一旦ddl1有了它的所有项,ddl2也应该这样做。创建一个类来表示DDL中的数据,然后调用get方法。对两个DDL使用相同的ObjectDataSource,或者使用单独的ObjectDataSource。您可以优化该类以使用静态成员,但它是这可能太过分了
这个策略将很好地在将来重构成一个db调用
在Web表单中:
<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;
}
}
}
对应的对象:
<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;
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
命名空间WebApplication1.Data
{
公共类myddleItem
{
公共字符串Id{get;set;}
公共字符串名称{get;set;}
公共静态列表GetAll()
{
列表=新列表();
添加(新的MyDdlItem{Id=“1”,Name=“Option 1”});
添加(新的MyDdlItem{Id=“2”,Name=“Option 2”});
添加(新的MyDdlItem{Id=“3”,Name=“Option 3”});
添加(新的MyDdlItem{Id=“4”,Name=“Option 4”});
退货清单;
}
}
}
因为这会导致其他问题(),我不需要胡塞尔