dropdownlist不加载链

时间:2014-08-03 19:53:59

标签: asp.net webforms

我有一个方法可以根据您之前的选择填充下拉列表:

private void CarregarCombos(DropDownList dropDown)
{
    dropDown.Items.Clear();

    dynamic resultados = null;

    switch (dropDown.ID)
    {
        case "ddlOrgaoProdutor":
            dropDown.Items.Add(new ListItem("0000 - Todos os Órgãos", ""));
            OrgaoProdutor bllOPR = new OrgaoProdutor();
            resultados = new List<OrgaoProdutorInfo>();
            resultados = bllOPR.ListarOrgaoProdutorPorStatus("1,2").OrderBy(n => n.Numero).ToList();
            break;

        case "ddlFuncao":
            dropDown.Items.Add(new ListItem("Selecione", ""));
            Funcao bllFuncao = new Funcao();
            resultados = new List<FuncaoInfo>();
            resultados = bllFuncao.ListarPorOrgaoProdutor(DataParser.ToInt(ddlOrgaoProdutor.SelectedValue), 1).OrderBy(n => n.Numero).ToList();
            break;

        case "ddlSubFuncao":
            dropDown.Items.Add(new ListItem("Selecione", ""));
            SubFuncao bllSubFuncao = new SubFuncao();
            resultados = new List<SubFuncaoInfo>();
            resultados = bllSubFuncao.ListarSubFuncao(DataParser.ToInt(ddlOrgaoProdutor.SelectedValue), DataParser.ToInt(ddlFuncao.SelectedValue), 1).OrderBy(n => n.Numero).ToList();
            break;

        case "ddlAtividade":
            dropDown.Items.Add(new ListItem("Selecione", ""));
            Atividade bllAtividade = new Atividade();
            resultados = new List<AtividadeInfo>();
            resultados = bllAtividade.ListarAtividades(DataParser.ToInt(ddlOrgaoProdutor.SelectedValue), DataParser.ToInt(ddlFuncao.SelectedValue), DataParser.ToInt(ddlSubFuncao.SelectedValue), 1).OrderBy(n => n.Numero).ToList();
            break;
    }


    foreach (var item in resultados)
        dropDown.Items.Add(new ListItem(string.Format("{0} - {1}", item.Numero.ToString(), item.Descricao), item.Codigo.ToString()));

}

我的Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        CarregarCombos(ddlOrgaoProdutor);
        CarregarCombos(ddlFuncao);
    }
}

只是第一个下拉列表填入前端,但在代码隐藏中所有工作都完美,因为在其他应用程序中,该方法正常工作。会是渲染问题吗? 细节:当我围绕可见链条时,只启用第一个。

由于

1 个答案:

答案 0 :(得分:0)

从下面的代码中,您为ListItem

添加了Text = 0000 - Todos os Órgãos Value as ""ddlOrgaoProdutor (the parent dropdown) case "ddlOrgaoProdutor": dropDown.Items.Add(new ListItem("0000 - Todos os Órgãos", ""));
ddlOrgaoProdutor1's SelectedValue

对于所有其他下拉列表的数据,您要根据""过滤数据,该ddlOrgaoProdutor定义为resultados = bllFuncao.ListarPorOrgaoProdutor(DataParser.ToInt(ddlOrgaoProdutor.SelectedText), 1).OrderBy(n => n.Numero).ToList(); 。您可能需要发送或{set {}设置if (!IsPostBack) .. )

的实际值
ddlOrgaoProdutor

此外,您在初始页面加载期间填充下拉列表(OnSelectedIndexChanged="ddlOrgaoProdutor_SelectedIndexChanged" AutoPostBack="true",当ddlOrgaoProdutor的值发生更改时,将不会触发该下拉列表。如果您需要在{的值重新绑定所有drowdowns时{1}}更改然后您需要设置CarregarCombos并从事件调用函数 protected void ddlOrgaoProdutor_SelectedIndexChanged(object sender, EventArgs e) { DropDownList ddlFuncao= (DropDownList)Page.FindControl("ddlFuncao"); CarregarCombos(ddlFuncao); // find other dropdownlists and call the function CarregarCombos } 以获取所有其他下拉列表。

{{1}}