Assigning a single data source to multiple DropDownLists?

I want to assign the same data source to several DropDownLists in the form, when the page loads, only the first drop-down list filled the contents of the data source, others are empty, what is the missing point? thanks for answers. Here are the codes:

<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(); } } 
+4
source share
3 answers

Because you are using dataReader instead, using datatable will work for you. The reader reads only and only forward, so only the first dropdonw is filled with data, while the others are empty.

code changed:

 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(); } } 
+5
source

According to the documentation, the data reader is only forward. Use the data table or read in the list and link your combos to it.

+1
source

enter the code here

  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)); } 

real simple code.

0
source

Source: https://habr.com/ru/post/1313855/


All Articles