Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cintiadel

CascadingDropDown

Recommended Posts

Estou tentando fazer o dropdown em cascata assim como esse exemplo:

http://www.asp.net/AJAX/AjaxControlToolkit...ngDropDown.aspx

só q nele é criado um xml, para preencher

o dropdown, e no meu caso quero que seja preenchido com o datasource (dados do banco) como faço???

 

tentei fazer e da esse erro:

AjaxControlToolkit.CascadingDropDown missing required ServiceMethod property value for DropDownList2_CascadingDropDown.

Nome do parâmetro: ServiceMethod

o q eu coloco nesse parametro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

 

Comecei agora a trabalhar com ajax e um dos motivos foi esse controle pois preciso controlar 3 drops.

 

Pelo que entendi desse controle você só pode usar o cascadingDropDown com um webservice.

 

O que eu fiz com o autocomplete foi fazer o webservice com um dataset, mas ainda não está pronta, mas só pra dar uma ideia

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://www.asp.net/AJAX/AjaxControlToolkit.../CCDWithDB.aspx

 

 

Eu fiz mais ou menos isso com o autocomplete, deve servir para o cascadingdropdownlist

tentei converter pra vb, mas uma catastrofe...rsrsrs..vários erros...várias palavras grifadas em azul.

e queria saber onde eu coloco a conexao e o select do banco ????

segue o codigo:

Imports System
Imports System.Web
Imports System.Collections
Imports System.Collections.Generic
Imports System.Collections.Specialized
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports AjaxControlToolkit
Imports System.Data
Imports System.Data.SqlClient

<WebService([Namespace]:="http://tempuri.org/"), WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
Public Class Aluno
	Inherits System.Web.Services.WebService

	Public Sub New()
	End Sub 'New
Public<WebMethod()>  _
Function GetMakes(knownCategoryValues As String, category As String) As CascadingDropDownNameValue()
	Dim makeAdapter As New CarsTableAdapters.MakeTableAdapter()
	Dim makes As Cars.MakeDataTable = makeAdapter.GetMakes()

	List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();

	Dim dr As DataRow
   For Each dr In  makes
	Dim make As String = CStr(dr("Make"))
	Dim makeId As Integer = CInt(dr("MakeID"))
	  values.Add(New CascadingDropDownNameValue(make, makeId.ToString()))
   Next dr
   Return values.ToArray()
End Function 'GetMakes


Public<WebMethod()>  _
Function GetModelsForMake(knownCategoryValues As String, category As String) As CascadingDropDownNameValue()
	Dim kv As StringDictionary = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)
	Dim makeId As Integer
   If Not kv.ContainsKey("Make") Or Not Int32.TryParse(kv("Make"), makeId) Then
	  Return Nothing
   End If

	List<CascadingDropDownNameValue> values =  new List<CascadingDropDownNameValue>()

	Dim makeAdapter As New CarsTableAdapters.ModelTableAdapter()
	Dim models As Cars.ModelDataTable = makeAdapter.GetModelsForMake(makeId)
   List < CascadingDropDownNameValue > values = New List(__unknown < CascadingDropDownNameValue > __unknown)
   For Each dr In  models
	  values.Add(New CascadingDropDownNameValue(CStr(dr("Model")), dr("ModelID").ToString()))
   Next dr
   Return values.ToArray()
End Function 'GetModelsForMake

Public<WebMethod()>  _
Function GetColorsForModel(knownCategoryValues As String, category As String) As CascadingDropDownNameValue()
	Dim kv As StringDictionary = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)
	Dim modelId As Integer
   If Not kv.ContainsKey("Model") Or Not Int32.TryParse(kv("Model"), modelId) Then
	  Return Nothing
   End If
	Dim adapter As New CarsTableAdapters.ColorTableAdapter()
	Dim colorTable As Cars.ColorDataTable = adapter.GetColorsForModel(modelId)
	List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>()
	Dim dr As DataRow
   For Each dr In  colorTable
	  values.Add(New CascadingDropDownNameValue(CStr(dr("Color")), dr("ColorID").ToString()))
   Next dr
   Return values.ToArray()
End Function 'GetColorsForModel

End Class

por enquanto coloquei o do exemplo só pra me acertar depois coloco meus campos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola, voce pode definir a conexao com seu banco de dados no arquivo web.config.

 

<connectionStrings>

<add name="NomedaConexao" connectionString="Data Source=LocaldaSuaFonteDeDados;Initial Catalog=SeuBancoDeDados;Persist Security Info=True;User ID=SeuUsuario;Password=SuaSenha" providerName="System.Data.SqlClient"/>

</connectionStrings>

 

Dai dentro da sua aplicacao (dentro do codigo), voce informa a conexao.

 

conexao = New SqlConnection(ConfigurationManager.ConnectionStrings("NomedaConexao").ConnectionString)

Tambem dentro do codigo voce ira colocar seus Select´s, digo nos arquivos ".aspx.vb" ou ".aspx.cs".

 

Eu fiz um CascadingDropdown mas nao usando esse exemplo e funcionou com perfeitamente.

Claro que eu usei o Ajax mas em sua forma mais simples, com o UpdatePainel apenass.

 

Boa Sorte

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola, voce pode definir a conexao com seu banco de dados no arquivo web.config.

 

<connectionStrings>

<add name="NomedaConexao" connectionString="Data Source=LocaldaSuaFonteDeDados;Initial Catalog=SeuBancoDeDados;Persist Security Info=True;User ID=SeuUsuario;Password=SuaSenha" providerName="System.Data.SqlClient"/>

</connectionStrings>

 

Dai dentro da sua aplicacao (dentro do codigo), voce informa a conexao.

 

conexao = New SqlConnection(ConfigurationManager.ConnectionStrings("NomedaConexao").ConnectionString)

Tambem dentro do codigo voce ira colocar seus Select´s, digo nos arquivos ".aspx.vb" ou ".aspx.cs".

 

Eu fiz um CascadingDropdown mas nao usando esse exemplo e funcionou com perfeitamente.

Claro que eu usei o Ajax mas em sua forma mais simples, com o UpdatePainel apenass.

 

Boa Sorte

eu ate fiz um com updatepanel, mas acontece q se ele muda a seleção, ele começa a duplicar dados no dropdown

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a sua dropdown é preenchida no Page Load e durante o processo de cascade você da um load na pagina, pode ocorrer duplicação.

 

Verifique isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja :

 

If Not Page.IsPostBack Then

			MontaModalidades()  'Subrotina que ira carregar o Combo.
						  .
						  .
						  .
	   endif


Sub MontaModalidades()

		Dim conexao As SqlConnection
		Dim sql As String = "SELECT MODAL_ID,MODAL_NOME FROM MODALIDADES ORDER BY MODAL_NOME"
		Dim da As SqlDataAdapter
		Dim ds As DataSet

		conexao = New SqlConnection(ConfigurationManager.ConnectionStrings("SuaConexao").ConnectionString)

		Try

			conexao.Open()

			da = New SqlDataAdapter(sql, conexao)
			ds = New DataSet()

			da.Fill(ds, "MODALIDADES")

			With CboModalidade
				.DataTextField = "MODAL_NOME"
				.DataValueField = "MODAL_ID"
				.DataSource = ds.Tables("MODALIDADES").DefaultView
				.DataBind()
			End With
			CboModalidade.Items.Insert(0, "Selecione a Modalidade")
		Finally
			conexao.Close()
			conexao = Nothing
		End Try
	End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Declarou o Postback?

declarei sim Autopostback = True

estou populando através do sqldatasource...

mas to querendo saber como faz com cascadingdropdown, mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola, quanto ao PostBack, eu estava me referindo a linha abaixo:

If Not Page.IsPostBack Then
		  .
		  .
endif

Que evitara que certos comandos sejam executados toda vez que houver um PostBack.

Quando ao Cascading, eu tive esse problema, pois tenho uma rotina com 2 DropDown, onde o segundo depende do primeiro.Baseado em cada uma das opcoes do primeiro Drop, eu terei uma liasta de opcoes para o segundo.

Eu ainda sou iniciante e quebrei a cabeca para conseguir.Inclusive tentei fazer como voce, utilizando-me apenas do DataSource, a fim de nao ter que programar, afinal pode-se popular varios controles dessa forma e é bastante pratico.

Entretanto eu tive que colocar uma mensagem nos 2 Drop : Selecione o Item Desejado.

Pois na hora de selecionar o item no segundo Drop, eu preciso obrigatoriamente que um item ja tenha sido selecionado no primeiro.E em segundo lugar eu nao posso efetuar a gravacao dos dados se nenhum dos Drop´s tiver sido selecionado.

Bem eu fiz assim :
Nesse exemplo eu tenho um Drop com Clientes e outro e Gerentes.
Trabalho com varias empresas que sao o Cliente e essas empresas possuem seus gerentes.
Quando clico no cliente, sao selecionados apenas os gerentes do respectivo cliente que selecionei no primeiro Drop

[code]
 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

		Dim Sql As String
		Dim cmd As SqlCommand
		Dim dr As SqlDataReader = Nothing

		Dim conexao As SqlConnection
 
		If Not Page.IsPostBack Then
			MontaCliente()	Aqui eu monto o Primeiro DropDown de Clientes
									 Nao posso montar o segundo, pois preciso selecionar um item no primeiro Drop antes.		  

		 End If

	End Sub


Sub MontaCliente()

		Dim conexao As SqlConnection
		Dim sql As String
		Dim da As SqlDataAdapter
		Dim ds As DataSet

		sql = "SELECT CAMPO1,CAMPO2,CAMPO3... FROM CLIENTES ORDER BY CLIENTE_NOME"

		conexao = New SqlConnection(ConfigurationManager.ConnectionStrings("SuaConexao").ConnectionString)

		Try

			conexao.Open()

			da = New SqlDataAdapter(sql, conexao)
			ds = New DataSet()

			da.Fill(ds, "CLIENTES")

			With CboCliente
				.DataTextField = "CLIENTE_NOME"
				.DataValueField = "CLIENTE_ID"
				.DataSource = ds.Tables("CLIENTES").DefaultView
				.DataBind()
			End With
			CboCliente.Items.Insert(0, "Selecione o Cliente")
		Finally
			conexao.Close()
			conexao = Nothing
		End Try
	End Sub

' Apos o click no cliente selecionado, uso o evendo SelectedIndexChanged para carregar os gerentes do segundo Drop,utilizando o ID do cliente do primeiro Drop (CboCliente.SelectedItem.Value).Dessa forma eu seleciono apenas os gerentes referentes ao cliente selecionado.

   Protected Sub CboCliente_SelectedIndexChanged1(ByVal sender As Object, ByVal e As System.EventArgs) Handles CboCliente.SelectedIndexChanged
	  
		Dim conexao As SqlConnection
		Dim sql As String
		Dim da As SqlDataAdapter
		Dim ds As DataSet

		sql = "SELECT campo1,campo2... FROM REL_GERENTES "
		sql += "WHERE CLIENTE_ID=" + CboCliente.SelectedItem.Value
		sql += "ORDER BY CLIENTE_GERENTE"

		conexao = New SqlConnection(ConfigurationManager.ConnectionStrings("SuaConexao").ConnectionString)

		Try

			conexao.Open()

			da = New SqlDataAdapter(sql, conexao)
			ds = New DataSet()

			da.Fill(ds, "REL_GERENTES")

			With CboGerenteCliente
				.DataTextField = "CLIENTE_GERENTE"
				.DataValueField = "GERENTE_ID"
				.DataSource = ds.Tables("REL_GERENTES").DefaultView
				.DataBind()
			End With
		Finally
			conexao.Close()
			conexao = Nothing
		End Try
	End Sub

Bem, isso e tudo, boa sorte

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.