Dynabout 0 Denunciar post Postado Outubro 28, 2008 Primeiramente Saudações a todos os membros, sou novo aqui(minha primeira postagem :rolleyes: ). Bom irei direto ao assunto. Preciso de ajuda com uns dropdownlist. É o seguinte, estou desenvolvendo uma pagina web(vb.net), com a função de cadastro/exclusão/alteração/pesquisa de ramais, e nela possuo 3 dropdownlist que precisam ser aninhados entre si, ate ai tudo bem, consegui fazer isso numa boa usando o datasource. Só que ai apareceu um probleminha, meu chefe me pediu que os dropdownlist não tivessem uma ordem específica para escolher. Por exemplo: com o datasource quando eu escolhia um item do primeiro dropdownlist (ddl), automaticamente ele mudava as opções do segundo(que são relacionadas com o primeiro) e automaticamente mudava as opções do terceiro ddl(que eram relacionadas com o primeiro e segundo). Só que tinha essa ordem de escolha, tinha que ser de cima para baixo, alguém saberia como fazer isso sem ordem específica? Tipo eu seleciono o ultimo ddl ele ja muda as opções dos outros 2, se eu seleciono o ddl do meio ele muda as opções dos outro dois(do primeiro e do ultimo), acho que fui claro. Minha base possui 4 tabelas(Segmento, Unidade, Departamento, Ramal), organizados da seguinte maneira: ramal pertence a departamento que pertence a unidade e que pertence a segmento. Abaixo um pouco do código do que eu tentei fazer:Esses 2 são da classe que faz a pesquisa no banco sql. Public Function ddlDCSEGTO_WebForm_DEPTO(ByVal prmCDSEGTO As String, ByVal prmCDUNIDADE As String) As DataTable Dim strQuery As New StringBuilder strQuery.Append(" SELECT S.CDSEGTO ,") strQuery.Append(" S.DCSEGTO ") strQuery.Append(" FROM SEGTO S ") 'strQuery.Append(" INNER JOIN UNIDADE U ") 'strQuery.Append(" ON U.CDSEGTO = S.CDSEGTO ") strQuery.Append(" WHERE S.CDSEGTO = '" & prmCDSEGTO & "' ") 'If Not prmCDUNIDADE = 0 Then 'strQuery.Append(" AND U.CDUNIDADE = '" & prmCDUNIDADE & "' ") 'End If Return cldBancoDados.RetornaDataTable(strQuery.ToString) End Function Public Function ddlDCUNIDADE_WebForm_DEPTO(ByVal prmCDUNIDADE As String, ByVal prmCDSEGTO As String) As DataTable Dim strQuery As New StringBuilder strQuery.Append(" SELECT U.CDUNIDADE ,") strQuery.Append(" U.DCUNIDADE ,") strQuery.Append(" U.CDSEGTO ") 'strQuery.Append(" S.DCSEGTO ") strQuery.Append(" FROM UNIDADE U ") strQuery.Append(" INNER JOIN SEGTO S ") strQuery.Append(" ON S.CDSEGTO = U.CDSEGTO ") strQuery.Append(" WHERE U.CDUNIDADE = '" & prmCDUNIDADE & "' ") 'If Not prmCDSEGTO = 0 Then 'strQuery.Append(" AND S.CDSEGTO = '" & prmCDSEGTO & "' ") 'End If Return cldBancoDados.RetornaDataTable(strQuery.ToString) End FunctionE agora segue o código do formulário em que será chamada as querys da classe: 'Sub carrega ddlDCSEGTO Private Sub CarregaCampoddlDCSEGTO() Dim TEMP As String = ddlDCSEGTO.Text Dim dt As Data.DataTable = querySql.ddlDCSEGTO_WebForm_DEPTO(ddlDCSEGTO.SelectedValue, ddlDCUNIDADE.SelectedValue) ddlDCSEGTO.DataTextField = "DCSEGTO" ddlDCSEGTO.DataValueField = "CDSEGTO" ddlDCSEGTO.DataSource = dt.DefaultView ddlDCSEGTO.DataBind() Try If ddlDCSEGTO.Items.Count = 2 Then ddlDCSEGTO.Items.Remove(0) Else ddlDCSEGTO.Text = TEMP End If Catch End Try End Sub 'sub que carrega a ddlDCUNIDADE Private Sub CarregaCampoddlDCUNIDADE() Dim TEMP As String = ddlDCUNIDADE.Text Dim dt As Data.DataTable = querySql.ddlDCUNIDADE_WebForm_DEPTO(ddlDCUNIDADE.SelectedValue, ddlDCSEGTO.SelectedValue) ddlDCUNIDADE.DataTextField = "DCUNIDADE" ddlDCUNIDADE.DataValueField = "CDUNIDADE" ddlDCUNIDADE.DataSource = dt.DefaultView ddlDCUNIDADE.DataBind() Try If ddlDCUNIDADE.Items.Count = 2 Then ddlDCUNIDADE.Items.Remove(0) Else ddlDCUNIDADE.Text = TEMP End If Catch End Try End Sub Protected Sub ddlDCSEGTO_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlDCSEGTO.TextChanged If Page.IsPostBack Then CarregaCampoddlDCSEGTO() 'CarregaCampoddlDCUNIDADE() End If End Sub Protected Sub ddlDCUNIDADE_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlDCUNIDADE.TextChanged If Page.IsPostBack Then 'CarregaCampoddlDCSEGTO() CarregaCampoddlDCUNIDADE() End If End Sub Private Sub CarregaddlDCSEGTO_eventoLoad() 'busca os dados na tabela SQL para depois preencher o dropdownlist Dim strQuery As String Dim strConn As String Dim ConnDB As SqlConnection Dim dsSEGTO As Data.DataSet Dim daSEGTO As SqlDataAdapter 'passa a query que busca os dados na tabela sql e faz a conexão com o banco de dados strQuery = "SELECT CDSEGTO, DCSEGTO FROM SEGTO" strConn = "Data Source=BRABDO-ITDEV-09\SQLEXPRESS;Initial Catalog=RAMAL;Persist Security Info=True;User ID=ldc;Password=ldc" 'Abre o banco ConnDB = New SqlConnection(strConn) ConnDB.Open() 'preenche o dropdownlist daSEGTO = New SqlDataAdapter(strQuery, ConnDB) dsSEGTO = New Data.DataSet daSEGTO.Fill(dsSEGTO, "SEGTO") ddlDCSEGTO.DataTextField = "DCSEGTO" ddlDCSEGTO.DataValueField = "CDSEGTO" ddlDCSEGTO.DataSource = dsSEGTO.Tables("SEGTO").DefaultView ddlDCSEGTO.DataBind() End Sub Private Sub CarregaddlDCUNIDADE_eventoLoad() 'busca os dados na tabela SQL para depois preencher o dropdownlist Dim strQuery As String Dim strConn As String Dim ConnDB As SqlConnection Dim dsUNIDADE As Data.DataSet Dim daUNIDADE As SqlDataAdapter 'passa a query que busca os dados na tebela SQL e faz conexão com o banco de dados strQuery = "SELECT CDSEGTO, CDUNIDADE, DCUNIDADE FROM UNIDADE" strConn = "Data Source=BRABDO-ITDEV-09\SQLEXPRESS;Initial Catalog=RAMAL;Persist Security Info=True;User ID=ldc;Password=ldc" 'Abre o banco ConnDB = New SqlConnection(strConn) ConnDB.Open() 'preenche o dropdownlist daUNIDADE = New SqlDataAdapter(strQuery, ConnDB) dsUNIDADE = New Data.DataSet daUNIDADE.Fill(dsUNIDADE, "UNIDADE") ddlDCUNIDADE.DataTextField = "DCUNIDADE" ddlDCUNIDADE.DataValueField = "CDUNIDADE" ddlDCUNIDADE.DataSource = dsUNIDADE.Tables("UNIDADE").DefaultView ddlDCUNIDADE.DataBind() End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'passando as funções que carrega as dropdownlist If Not Page.IsPostBack Then CarregaddlDCSEGTO_eventoLoad() CarregaddlDCUNIDADE_eventoLoad() 'ResetaCampos() 'CarregaCampoddlDCSEGTO() 'CarregaCampoddlDCUNIDADE() End If End SubDesde já agradeço pela sua atenção e tempo despendido em me ajudar e peço desculpas pelo tamanho da postagem. Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Outubro 28, 2008 Movido Plataforma .NET http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Plataforma .NET » Web Applications Cara você terá que criar um contador, uma variável que irá identificar qual foi clicado primeiro e mandar pro método que ele deve ir. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Dynabout 0 Denunciar post Postado Outubro 28, 2008 Movido Plataforma .NET http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Plataforma .NET » Web Applications Cara você terá que criar um contador, uma variável que irá identificar qual foi clicado primeiro e mandar pro método que ele deve ir. Abraços... Muito Obrigado pela sugestão!! Tentarei aqui, mais tarde trarei a resposta se deu certo ou não!! Mais uma vez Obrigado!! Compartilhar este post Link para o post Compartilhar em outros sites
Dynabout 0 Denunciar post Postado Outubro 28, 2008 Movido Plataforma .NET http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Plataforma .NET » Web Applications Cara você terá que criar um contador, uma variável que irá identificar qual foi clicado primeiro e mandar pro método que ele deve ir. Abraços... Muito Obrigado pela sugestão!! Tentarei aqui, mais tarde trarei a resposta se deu certo ou não!! Mais uma vez Obrigado!! Não consegui será que teria mais alguma dica ou um exemplo prático? Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Outubro 29, 2008 Cria uma session com valor 0. Quando o primeiro DropDown for escolhido, você adiciona mais 1 para o valor da session, e verifica. Se o valor da session for 1 manda pro evento A, se o valor for 2 manda pro evento B, se o valor for 3 manda pro evento C. Assim que o segundo Drop for escolhido, você adiciona mais 1 para o valor da session e faz a verificação de novo, e assim por diante. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Dynabout 0 Denunciar post Postado Outubro 29, 2008 Cria uma session com valor 0. Quando o primeiro DropDown for escolhido, você adiciona mais 1 para o valor da session, e verifica. Se o valor da session for 1 manda pro evento A, se o valor for 2 manda pro evento B, se o valor for 3 manda pro evento C. Assim que o segundo Drop for escolhido, você adiciona mais 1 para o valor da session e faz a verificação de novo, e assim por diante. Abraços... Muito Obrigado, irei tentar isso. Abraços.. Compartilhar este post Link para o post Compartilhar em outros sites
Dynabout 0 Denunciar post Postado Fevereiro 5, 2009 Caro moderador, desculpe a demora, ocorreu um imprevisto aqui e fui realocado para dar manutenção em outro software, tendo que abandonar momentaneamente este projeto. Mas agora voltei e consegui sanar o problema. Se você puder marcar esse topico como solucionado ficaria grato. Mais uma vez desculpa pela demora a outros usuarios que talvez se interressaram. Se alguem quiser a resposta me mande uma pm.Grato. Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Fevereiro 5, 2009 Poste a foma que utilizou para resolver este problema. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites