0

我遇到了一个奇怪的问题,我复制并粘贴了一些代码,但是这个在一个视图中运行良好,在另一个视图中不起作用。

我的问题是dropDownList(“Destino”或“Origem”)当没有值属性val(“”)有文本属性val(“Selecione um Tipo”),但在第一个“SelectIndexChange”事件触发后,这个dropDownList得到了text 和 value 属性的 val ("Selecione um Tipo")。

那是我的代码:

    protected void ddlTipoUADestinoSrc_SelectedIndexChanged(object sender, EventArgs e)
    {
        List<UnidadeArmazenamento> uas = new UnidadeArmazenamentoBO().GetAllUnidadesArmazenamentoByUnidade(LoggedUser.UnidadeActiva.IDUNIDADE, false);
        if (!string.IsNullOrEmpty(ddlTipoUADestinoSrc.SelectedValue))
        {
            if (ddlTipoUADestinoSrc.SelectedValue.Equals("Silo"))
                uas = constroiModeloEBusca(TipoUnidadeArmazenamento.Silo);

            else if (ddlTipoUADestinoSrc.SelectedValue.Equals("Moega"))
                uas = constroiModeloEBusca(TipoUnidadeArmazenamento.Moega);


            ddlSiloDestinoSrc.DataSource = uas;
            ddlSiloDestinoSrc.DataBind();
        }
        else
        {
            this.LoadSiloDestino(uas);
        }
    }

辅助方法:

    private void LoadSiloDestino(List<UnidadeArmazenamento> unidadesArmazenamento)
    {
            ddlSiloDestinoSrc.DataTextField = TypeExtensions.NomedaPropriedade<UnidadeArmazenamento>(p => p.NOME);
            ddlSiloDestinoSrc.DataValueField = TypeExtensions.NomedaPropriedade<UnidadeArmazenamento>(p => p.IDUNIDADEARMAZENAMENTO);

            ddlSiloDestinoSrc.DataSource = unidadesArmazenamento;

            ddlSiloDestinoSrc.DataBind();

            ddlSiloDestinoSrc.Items.Insert(0, new ListItem("Selecione o destino", string.Empty));
    }



    private ListItem[] tiposUnidadeArmazenamento()
    {
         return UIHelp.BuildDropDownListEnum<TipoUnidadeArmazenamento>("Selecione um tipo");
    }

    private List<UnidadeArmazenamento> constroiModeloEBusca(TipoUnidadeArmazenamento tipoUA)
    {
        return new UnidadeArmazenamentoBO().GetUnidadesArmazenamentoByModel(new UnidadeArmazenamento { TIPOUNIDADE = tipoUA, Unidade = this.LoggedUser.UnidadeActiva }, false);
    }

最后一个方法是在初始化页面调用

        private void LoadDropDownList()
        {
            UnidadeArmazenamentoBO siloBo = new UnidadeArmazenamentoBO();

            if (ddlTipoGrao.Items.Count == 0)
                ddlTipoGrao.Items.AddRange(UIHelp.BuildDropDownListEnum<Grao>("Selecione o Grão"));

            if (ddlSafra.Items.Count == 0)
                ddlSafra.Items.Insert(0, new ListItem("Selecione a safra", string.Empty));

            ddlSafra.DataBind();

            if (ddlTipoOrigem.Items.Count == 0)
                ddlTipoOrigem.Items.AddRange(UIHelp.BuildDropDownListEnum<TipoOrigemEnsilagem>("Selecione o tipo de Origem"));

            if (ddlTipoDestino.Items.Count == 0)
                ddlTipoDestino.Items.AddRange(this.tiposUnidadeArmazenamento());

            if (ddlSituacaoProduto.Items.Count == 0)
                ddlSituacaoProduto.Items.AddRange(UIHelp.BuildDropDownListEnum<EstadoDoGrao>("Selecione a Situação"));

            List<Equipamento> secadores = new EquipamentosBO().GetEquipamentosByUnidade(this.LoggedUser.UnidadeActiva.IDUNIDADE).FindAll(s => s.TIPO == TipoEquipamento.Secador && !s.MANUTENCAO);

            ddlSecador.DataSource = secadores;
            ddlSecadorSrc.DataSource = secadores;
            ddlSecadorSrc.DataBind();
            ddlSecador.DataBind();
            ddlSecador.Items.Insert(0, new ListItem("Selecione o secador", ""));
            ddlSecadorSrc.Items.Insert(0, new ListItem("Selecione o secador", ""));

            ddlSiloOrigemSrc.DataTextField = TypeExtensions.NomedaPropriedade<UnidadeArmazenamento>(p => p.NOME);
            ddlSiloOrigemSrc.DataValueField = TypeExtensions.NomedaPropriedade<UnidadeArmazenamento>(p => p.IDUNIDADEARMAZENAMENTO);

            ddlSiloDestinoSrc.DataTextField = TypeExtensions.NomedaPropriedade<UnidadeArmazenamento>(p => p.NOME);
            ddlSiloDestinoSrc.DataValueField = TypeExtensions.NomedaPropriedade<UnidadeArmazenamento>(p => p.IDUNIDADEARMAZENAMENTO);

            List<UnidadeArmazenamento> unidadesArmazenamento = siloBo.GetAllUnidadesArmazenamentoByUnidade(this.LoggedUser.UnidadeActiva.IDUNIDADE, false);

            ddlTipoUADestinoSrc.DataSource = this.tiposUnidadeArmazenamento();
            ddlTipoUADestinoSrc.DataBind();

            ddlTipoUAOrigemSrc.DataSource = this.tiposUnidadeArmazenamento();
            ddlTipoUAOrigemSrc.DataBind();

            ddlSiloOrigemSrc.DataSource = unidadesArmazenamento;
            ddlSiloOrigemSrc.DataBind();//utilizado para consultas
            ddlSiloOrigemSrc.Items.Insert(0, new ListItem("Selecione a origem", String.Empty));

            ddlSiloDestinoSrc.DataSource = unidadesArmazenamento.FindAll(s => s.TIPOUNIDADE == TipoUnidadeArmazenamento.Silo);
            ddlSiloDestinoSrc.DataBind();//utilizado para consultas
            ddlSiloDestinoSrc.Items.Insert(0, new ListItem("Selecione um silo", String.Empty));

            ddlSituacaoProduto.DataBind();
            ddlTipoGrao.DataBind();
            ddlTipoOrigem.DataBind();

            if (!this.RecordStatus.Equals(string.Empty))
            {
                ddlOrigem.DataTextField = TypeExtensions.NomedaPropriedade<UnidadeArmazenamento>(p => p.NOME);
                ddlOrigem.DataValueField = TypeExtensions.NomedaPropriedade<UnidadeArmazenamento>(p => p.IDUNIDADEARMAZENAMENTO);
                ddlOrigem.DataSource = siloBo.GetAllUnidadesArmazenamentoByUnidade(this.LoggedUser.UnidadeActiva.IDUNIDADE, false);
                ddlOrigem.DataBind();
            }
        }

任何帮助都是有用的,因为,我完全迷路了!

4

1 回答 1

0

检查您的下拉菜单是否被重新绑定,并且在回发完成后选择的值是否被覆盖。在页面加载中使用条件绑定您的下拉菜单

If(!IsPostBack)
于 2013-05-22T08:58:06.403 回答