【问题标题】:Assigning same datasource to multiple DropDownLists?将相同的数据源分配给多个 DropDownLists?
【发布时间】:2010-06-25 10:39:33
【问题描述】:

我想将同一个数据源分配给一个表单中的多个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();
        }
    }

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    因为您使用的是 dataReader 而不是这个使用 datatable 会为您工作。阅读器是只读的并且只转发,这就是为什么只有第一个 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();
            }
        }
    

    【讨论】:

    • 非常感谢,已经成功了,不过这次还有一个问题,表单发布后,每一个选中的值都是内容的第一个值。它不会选择真正选择的值。哪里有问题?
    • 检查视图状态属性,因为我认为它在回发后没有保持状态
    【解决方案2】:

    根据documentation,数据阅读器只能转发。使用数据表或读入列表并将您的组合绑定到它。

    【讨论】:

      【解决方案3】:
              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));
              }
      

      【讨论】:

        猜你喜欢
        • 2014-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-25
        • 1970-01-01
        • 2015-02-09
        • 1970-01-01
        • 2013-06-03
        相关资源
        最近更新 更多