ASP.Net: lista drop e fonte de dados para baixo criados dinamicamente
-
03-07-2019 - |
Pergunta
Eu tenho cerca de 10 drop down controles de lista que são povoadas. Em vez de copiar / colar e modificar alguns campos em cada um, gostaria de criá-los programaticamente. isso pode ser feito?
Aqui está o que um deles se parece. Eu gostaria de adicionar programaticamente 10 controles DropDownList e seus respectivos controles SqlDataSource.
<asp:SqlDataSource ID = "ddlDAGender" runat=server
ConnectionString="<%$ ConnectionStrings:test1ConnectionString %>"
SelectCommand = "select GenderID,Gender from mylookupGender"
>
</asp:SqlDataSource>
<asp:Label ID="Label3" runat="server" Text="Gender"></asp:Label>
<asp:DropDownList ID="ddlGender" runat="server"
DataSourceid="ddlDAGender"
DataTextField="Gender" DataValueField="GenderID"
>
</asp:DropDownList>
Solução
Você pode sempre criar seus controles de forma dinâmica. Neste caso, porém, se todas as suas listas suspensas são diferentes, eu não tenho certeza que está poupando-lhe qualquer coisa, desde que você ainda vai ter que atribuí-las de ID e fontes de dados individual.
Aqui está o que o código pode parecer:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindDropDownLists();
}
}
protected void Page_Init(object sender, EventArgs e)
{
SqlDataSource sqlDS = new SqlDataSource();
sqlDS.ConnectionString = ConfigurationManager.ConnectionStrings[0].ToString();
sqlDS.SelectCommand = "select GenderID,Gender from mylookupGender";
form1.Controls.Add(sqlDS);
DropDownList ddl = new DropDownList();
ddl.ID = "dddlGender";
ddl.DataSource = sqlDS;
ddl.DataTextField = "Gender";
ddl.DataValueField = "GenderID";
form1.Controls.Add(ddl);
// ... Repeat above code 9 times or put in a for loop if they're all the same...
}
private void BindDropDownLists()
{
foreach (Control ctl in form1.Controls)
{
if (ctl is DropDownList)
{
(ctl as DropDownList).DataBind();
}
}
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow