0

我有一个需要帮助修改的 C#.NET 方法。该方法的代码当前如下所示:

        Model1.Items.Clear();

        Color1.Items.Clear();

        Voltage1.Items.Clear();



        Model1.DataSource = modelList;

        Color1.DataSource = colorList;

        Voltage1.DataSource = voltagelist;



        Model1.DataBind();

        Color1.DataBind();

        Voltage1.DataBind();

Model1、Color1 和 Voltage1 都是下拉菜单的 ID,它们根据用户输入填充选项,并在其他地方处理。我的问题是,根据用户想要输入的数据量,每个菜单最多可以有十五个单独的实例。

这些菜单的 ID 将递增(Model1、Model2 ... Color1、Color2 ... 等),并且为了方便起见,它们都将被硬编码到应用程序中,而不是在运行时创建。

每组这些 DDL 都有自己的输入框,因此在 userInput5 中输入输入将触发 Model5、Color5 和 Voltage5 的填充。我的想法是我包含一个变量,我可以将集合的数量应用于该变量,并将此方法更改为看起来像“Model[number].Items.Clear();” 等等,但我不知道如何实现这一点。

很抱歉这个低级问题,但任何帮助将不胜感激。

4

2 回答 2

0

根据我对您的问题的理解,您可以创建一个接受 DropDownLists 以及源的方法,并在需要时调用此方法,并传递适当的控件:

public void BindDropDowns(DropDownList ddlModel, DropDownList ddlColor, DropDownList ddlVoltage,
                          List<Model> modelList, List<Color> colorList, List<Voltage> voltagelist)
{
    ddlModel.Items.Clear();
    ddlColor.Items.Clear();
    ddlVoltage.Items.Clear();

    ddlModel.DataSource = modelList;
    ddlColor.DataSource = colorList;
    ddlVoltage.DataSource = voltagelist;

    ddlModel.DataBind();
    ddlColor.DataBind();
    ddlVoltage.DataBind();
}
于 2013-05-16T22:38:08.873 回答
0

让我建议您使用中继器来实现此目的的一种方法。为简单起见,无需创建用户控件。抱歉,我在 VB 中编写代码,下面是我的示例。希望你能理解逻辑。

这是转发器的 ItemTemplate 的标记:

<asp:Repeater ID="Repeater1" runat="server">
  <ItemTemplate>
    <!-- your ddl's and any other controls -->
    <asp:DropDownList ID="ddlModel" runat="server" />
    <asp:DropDownList ID="ddlColor" runat="server" />
    <asp:DropDownList ID="ddlVolt" runat="server" />
  </ItemTemplate>
</asp:Repeater>
  1. 您不需要有一个实际的数据源就可以让中继器工作。您可以将转发器绑定到:

    Dim a As New ArrayList() From {1, 2, 3, 4, ..., n}
    Repeater1.DataSource = a
    Repeater1.DataBind()
    
  2. 您可以通过设置数组中的项目数来控制({1, 2, 3, 4, ..., n}其中“n”最多显示要显示的集合数)

  3. 要从中继器外部访问任何下拉菜单:

    Dim itm As RepeaterItem = Repeater1.Items(1) ' to get 2nd item in the repeater
    Dim ddlModel As DropDownList = DirectCast(itm.FindControl("ddlModel"), DropDownList)
    Dim ddlColor As DropDownList = DirectCast(itm.FindControl("ddlColor"), DropDownList)
    Dim ddlVolt As DropDownList = DirectCast(itm.FindControl("ddlVolt"), DropDownList)        
    
  4. 要从中继器的项目中访问,除第一行外与上述相同:

    Dim itm As RepeaterItem = sender.NamingContainer
    

    或者,在 ItemDataBound 内

    Dim itm As RepeaterItem = e.Item
    
于 2013-04-15T01:03:27.630 回答