【问题标题】:dropdownlist does not load chain下拉列表不加载链
【发布时间】:2014-09-26 07:50:50
【问题描述】:

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

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

}

我的页面加载:

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

只是在前端填充了第一个下拉菜单,但在代码隐藏中一切正常,因为在应用程序的其他步骤中该方法正常工作。会不会是渲染问题? 一个细节:当我链接可见时,只有第一个被启用。

谢谢

【问题讨论】:

    标签: asp.net webforms


    【解决方案1】:

    从下面的代码中,您将添加一个新的ListItem,其中Text = 0000 - Todos os ÓrgãosValue 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();
    

    此外,您在初始页面加载期间填充下拉列表(if (!IsPostBack) .. )当 ddlOrgaoProdutor 的值更改时不会触发。如果您需要在 ddlOrgaoProdutor 的值更改时重新绑定所有下拉列表,那么您需要设置 OnSelectedIndexChanged="ddlOrgaoProdutor_SelectedIndexChanged" AutoPostBack="true" 并从事件中调用函数 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
     }
    

    【讨论】:

    • 谢谢!但问题是具有属性 Enable = false 的面板。
    猜你喜欢
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多