为多个DropDownLists分配相同的数据源?

时间:2010-06-25 10:39:34

标签: c# asp.net

我想将相同的数据源分配给表单中的多个DropDownLists,当页面加载时,只有第一个下拉列表填充了数据源的内容,其他的是空的,缺少的是什么?谢谢你的回答。这是代码;

<form id="form1" runat="server">    
    <asp:ScriptManager ID="scriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="panel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
     <div id="div1" align="center">
      <table>
       <tr>
         <td><b>Brand-Model</b></td>
         <td><asp:TextBox ID="brandText" runat="server" BorderStyle="Inset"></asp:TextBox></td>
         <td><asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="brandText" Display="Dynamic" ErrorMessage="*"></asp:RequiredFieldValidator></td>
       </tr>
       <tr>
         <td><b>Black</b></td>
         <td><asp:DropDownList ID="blackList" runat="server"></asp:DropDownList></td>
         <td><asp:HyperLink ID="HyperLink1" runat="server" Text="Add Cartridge" NavigateUrl="~/Admin/addCartridge.aspx"></asp:HyperLink></td>
       </tr>
       <tr>
         <td><b>Color1</b></td>
         <td><asp:DropDownList ID="colorList1" runat="server"></asp:DropDownList></td>
       </tr> 
       <tr>
         <td><b>Color2</b></td>
         <td><asp:DropDownList ID="colorList2" runat="server"></asp:DropDownList></td>
       </tr>
       <tr>
         <td><b>Color3</b></td>
         <td><asp:DropDownList ID="colorList3" runat="server"></asp:DropDownList></td>
       </tr>
       <tr>
         <td><b>Other1</b></td>
         <td><asp:DropDownList ID="otherColor1" runat="server"></asp:DropDownList></td>
       </tr>
       <tr>
         <td><b>Other2</b></td>
         <td><asp:DropDownList ID="otherColor2" runat="server"></asp:DropDownList></td>
       </tr>
       <tr>
         <td><b>Other3</b></td>
         <td><asp:DropDownList ID="otherColor3" runat="server"></asp:DropDownList></td>
       </tr>
       <tr>
         <td></td>
         <td><asp:Button ID="submit" runat="server" Text="Submit" OnClick="submit_OnClick" /></td>       
       </tr>            
       <tr>
         <td></td>
         <td><asp:Label ID="submitInfo" runat="server"></asp:Label></td>       
       </tr>
      </table>
     </div>
    </ContentTemplate> 
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="submit" EventName="Click" />   
    </Triggers>   
   </asp:UpdatePanel> 
</form>

protected void FillTheDropDownLists()
    {
        SqlApplication con = new SqlApplication();
        try
        {
            SqlCommand cmd = new SqlCommand("SELECT name FROM BT.dbo.Cartridge ORDER BY name", con.GetConnection());
            con.OpenSqlConnection();

            SqlDataReader reader = cmd.ExecuteReader();

            blackList.DataValueField = "name";
            blackList.DataSource = reader;
            blackList.DataBind();

            colorList1.DataValueField = "name";
            colorList1.DataSource = reader;
            colorList1.DataBind();

            colorList2.DataValueField = "name";
            colorList2.DataSource = reader;
            colorList2.DataBind();

            colorList3.DataValueField = "name";
            colorList3.DataSource = reader;
            colorList3.DataBind();

            otherColor1.DataValueField = "name";
            otherColor1.DataSource = reader;
            otherColor1.DataBind();

            otherColor2.DataValueField = "name";
            otherColor2.DataSource = reader;
            otherColor2.DataBind();

            otherColor3.DataValueField = "name";
            otherColor3.DataSource = reader;
            otherColor3.DataBind();

            reader.Close();
        }
        catch (Exception err)
        {
            System.Diagnostics.Debug.WriteLine("Exception: " + err.Message);
        }
        finally
        {
            con.CloseSqlConnection();
        }
    }

3 个答案:

答案 0 :(得分:5)

因为你正在使用dataReader而不是这个使用数据表将为你工作。阅读器是只读和向前的,这就是为什么只有第一个dropdonw充满数据而其他人是空的。

更改了代码:

protected void FillTheDropDownLists()
    {
        SqlApplication con = new SqlApplication();
        try
        {
            SqlCommand cmd = new SqlCommand("SELECT name FROM BT.dbo.Cartridge ORDER BY name", con.GetConnection());
            con.OpenSqlConnection();

            SqlDataReader reader = cmd.ExecuteReader();
             DataTable dt = new DataTable();
            dt.Load(reader );

            blackList.DataValueField = "name";
            blackList.DataSource = dt ;
            blackList.DataBind();

            colorList1.DataValueField = "name";
            colorList1.DataSource = dt ;
            colorList1.DataBind();

            colorList2.DataValueField = "name";
            colorList2.DataSource = reader;
            colorList2.DataBind();

            colorList3.DataValueField = "name";
            colorList3.DataSource = dt ;
            colorList3.DataBind();

            otherColor1.DataValueField = "name";
            otherColor1.DataSource = dt ;
            otherColor1.DataBind();

            otherColor2.DataValueField = "name";
            otherColor2.DataSource = dt ;
            otherColor2.DataBind();

            otherColor3.DataValueField = "name";
            otherColor3.DataSource = dt ;
            otherColor3.DataBind();

            reader.Close();
        }
        catch (Exception err)
        {
            System.Diagnostics.Debug.WriteLine("Exception: " + err.Message);
        }
        finally
        {
            con.CloseSqlConnection();
        }
    }

答案 1 :(得分:1)

根据documentation数据,读者仅向前推进。使用数据表或读入列表并将组合绑定到它。

答案 2 :(得分:0)

在这里输入代码

        for (int i = 1; i <= 260; i++)
        {
            ContentPlaceHolder maincontent = Page.Master.FindControl("MainContent") as ContentPlaceHolder;
            DropDownList a = (DropDownList)maincontent.FindControl("ddl" + i);



            a.DataSource = ds;
            a.DataTextField = "Options";
            a.DataValueField = "id";
            a.DataBind();
            a.Items.Insert(0, new ListItem("Select", "0", true));
        }

真正的简单代码。