Construir WS com select Box
Preciso de ajuda para construir uma rotina para um webservice que lista em um selectbox os estados e paises disponiveis no sistema.
Ou seja o campo pais não pode retornar qualquer coisa, tem que ser um item de um select box.
Régis Mello
Curtidas 0
Respostas
[devmedia .net]
05/03/2009
Opa, tudo bem Régis ?
Bom não sei se entendi corretamente..
Vamos lá..
Você quer chamar um webservices que retorne os estados de um determinado país ?
Passando como parâmetro para o webservices o País e ele retornará os estados do mesmo ??
É isso ?
Caso contrário, por favor tente ser uma pouco mais específico..
Grande abraço
Fico no aguardo de seu retorno..
Carlos Jr
GOSTEI 0
Régis Mello
05/03/2009
Não.
Tenho um WS que solicita o pais, mas não posso aceitar qualquer pais, precisa ser um pais válido, por isso pensei gerar um selectbox para apresentar os paises, isso é possível?
Um outro exemplo que também preciso fazer é mostrar um selectbox com nomes e Ids de categorias existentes para inserção de uma nova sub-categoria.
Espero que eu tenha conseguido me explicar.
Att
Regis
GOSTEI 0
[devmedia .net]
05/03/2009
Opa,
bom...
No caso do WebService você terá que ter na sua tela que o chama..
criar um ComboBox com os paises válidos...
comboBox1.DataSource = dt; Aqui você coloca a tabela que contém os países válidos
comboBox1.DataTextField = "NOME_PAIS"; // Nome do campo que contém o nome do país na tabela comboBox1.DataValueField = "CODIGO_PAIS"; // Nome do campo que contém o código do país na tabela comboBox1.DataBind(); Então na chamada do método do seu WS você colocará metodoWebservice(comboBox1.SelectedValue);//comboBox1.SelectedValue é o código do país na tabela só isso... Quanto a outra dúvida... Você deve fazer a mesma coisa de cima... comboBox1.DataSource = dt; Aqui você coloca a tabela que contém os países válidos
comboBox1.DataTextField = "NOME_CATEGORIA"; // Nome do campo que contém o nome da categoria comboBox1.DataValueField = "CODIGO_CATEGORIA"; // Nome do campo que contém o código da categoria comboBox1.DataBind(); Na sua tela você terá um TextBox que corresponderá ao nome da subcategoria... txtSubCategoria no método de inserção da subcategoria você fará..
inserirSubcategoria(comboBox1.SelectedValue, txtSubCategoria.Text); só implementar essa idéia e boa... Aguardo seu retorno.. Grande Abraço Carlos Jr
comboBox1.DataTextField = "NOME_PAIS"; // Nome do campo que contém o nome do país na tabela comboBox1.DataValueField = "CODIGO_PAIS"; // Nome do campo que contém o código do país na tabela comboBox1.DataBind(); Então na chamada do método do seu WS você colocará metodoWebservice(comboBox1.SelectedValue);//comboBox1.SelectedValue é o código do país na tabela só isso... Quanto a outra dúvida... Você deve fazer a mesma coisa de cima... comboBox1.DataSource = dt; Aqui você coloca a tabela que contém os países válidos
comboBox1.DataTextField = "NOME_CATEGORIA"; // Nome do campo que contém o nome da categoria comboBox1.DataValueField = "CODIGO_CATEGORIA"; // Nome do campo que contém o código da categoria comboBox1.DataBind(); Na sua tela você terá um TextBox que corresponderá ao nome da subcategoria... txtSubCategoria no método de inserção da subcategoria você fará..
inserirSubcategoria(comboBox1.SelectedValue, txtSubCategoria.Text); só implementar essa idéia e boa... Aguardo seu retorno.. Grande Abraço Carlos Jr
GOSTEI 0
[devmedia .net]
05/03/2009
Olá Régis, tudo bem?
Estou aguardando seu retorno para saber se resolveu seu problema,
ou se precisa de mais ajuda.
Grande abraço
Carlos Jr
GOSTEI 0
Régis Mello
05/03/2009
Sinceramente nao entendi a explicação.
Eu não vou chamar o WS , eu vou criá-lo para ser chamado por outro sistema, isso quer dizer que eu não consigo forçar o sistema que invoca meu WS a seguir um padrão, sem consultar um tabela do meu Banco e verificar que aquele dado existe?
Regis
GOSTEI 0
[devmedia .net]
05/03/2009
Oi Régis, tduo bem ?
Bom, pelo que eu entendi você deseja chamar um webservice passando parâmetro de país,
mas quer validar o país, para que não passem um país que não existe correto ?
Para isso faça os passos que eu detalhei...
Me desculpe se entendi errado, por favor me explique novamente com mais detalhes,
para que possamos continuar nosso atendimento com mais objetividade e rapidez.
No aguardo...
Grande Abraço
Carlos Jr
GOSTEI 0
[devmedia .net]
05/03/2009
Oi Régis tudo bem ?
Estou aguardando seu retorno para que possamos dar continuidade ao seu chamado,
e lhe ajudar na solução da sua dúvida.
Abraços
Carlos Jr
GOSTEI 0
Régis Mello
05/03/2009
Preciso gravar umas fotos em um diretório do meu WS , e gravar o caminho no Banco de Dados , através de WS.
Tem alguma dica de como fazer isso?
Att
Regis
GOSTEI 0
[devmedia .net]
05/03/2009
Opa, blz Régis...
Bom para isso você deve fazer os métodos normais para salvar um arquivo..
Coloque um objeto InputFile na tela,
e um botão...
No evento do botão salvar coloque o código que irá salvar a imagem em sua máquina
chamando um método no webservices que irá salvar a image no servidor.
protected void btnUpload_Click(object sender, EventArgs e)
{
//Pegamos o caminho do diretório onde vamos salvar os Uploads
String caminho = Server.MapPath("upload\\");
FileUpload iFile = "C:\Seudiretorio\imagem.gif"
//Salvo o arquivo no diretório base, nesse caso "caminho".
iFile.PostedFile.SaveAs(caminho + Path.GetFileName(iFile.PostedFile.FileName));
lblMensagem.Text = "Upload do: " + iFile.FileName.ToString() + " arquivo Realizado com sucesso!";
}
Salve no banco de dados apenas o nome da imagem,
e em seu web.config coloque uma chave para o endereço padrao.
No momento de recuperar essa imagem pegue novamente o endereço padrão e concatene com o nome da imagem que buscou na base de dados.
Escrevi abaixo um um exemplo funcional:
<script runat="server">
Dim StrConnection As String = "Provider=microsoft.Jet.Oledb.4.0;Data Source=c:\\database\tblImagem.mdb"
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Try
If FileUpload1.PostedFile.FileName <> "" Then
'Cria a conexão do banco de dados
Dim ObjConnection As New OleDbConnection(StrConnection)
'Cria a string do comando sql
Dim SqlStr As String = "Insert into tblImagem(Nome,Imagem,Tamanho) values(@nome,@imagem,@tamanho)"
'Cria o objeto OleDbCommand para adicionar a string de conexão e comando sql
Dim ObjCommand As New OleDbCommand(SqlStr, ObjConnection)
'Adiciona o parametro dos objtos ao OleDbCommand
ObjCommand.Parameters.AddWithValue("@nome", TextBox1.Text)
ObjCommand.Parameters.AddWithValue("@imagem", FileUpload1.PostedFile.FileName)
ObjCommand.Parameters.AddWithValue("@tamanho", FileUpload1.PostedFile.ContentLength)
'Abri a conexão
ObjConnection.Open()
'Executa o comando no banco
ObjCommand.ExecuteNonQuery()
'Cria o camando para trazer o ultimo registro
Dim SqlMax As String = "Select Max(ID) from tblImagem"
'Cria o comando para calcular o ultimo registro
Dim ObjCommandMax As New OleDbCommand(SqlMax, ObjConnection)
'Determina o numero da imagem
Dim nMax As String = ObjCommandMax.ExecuteScalar().ToString()
'Nome temporario
nMax = nMax + ".jpeg"
'Salva o arquivo
FileUpload1.SaveAs(Server.MapPath("Imagens/" + nMax))
'Cria outra string Sql para atualiza o banco
Dim StrSqlAtualiza As String = "Update tblImagem set imagem=@imagem where id=@id"
'Cria o ObjCommand para ser executado
Dim ObjCommandAtualiza As New OleDbCommand(StrSqlAtualiza, ObjConnection)
'Adiciona os parametros
ObjCommandAtualiza.Parameters.AddWithValue("@imagem", Server.MapPath("imagens/") & nMax)
ObjCommandAtualiza.Parameters.AddWithValue("@id", ObjCommandMax.ExecuteScalar().ToString())
'Executa o comando
ObjCommandAtualiza.ExecuteNonQuery()
'fecha a conexão
ObjConnection.Close()
GridView1.DataBind()
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<p>
<br />
<br />
<br />
Nome:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1"
ErrorMessage="Campo Obrigatório">*</asp:RequiredFieldValidator>
<p>
</p>
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
EnableClientScript="False" ShowMessageBox="True" ShowSummary="False" />
<p>
Foto:
<asp:FileUpload ID="FileUpload1" runat="server" />
</p>
<p>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click"
Text="Inserir" />
</p> Aguardo seu retorno, Abraços Carlos Jr
Dim StrConnection As String = "Provider=microsoft.Jet.Oledb.4.0;Data Source=c:\\database\tblImagem.mdb"
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Try
If FileUpload1.PostedFile.FileName <> "" Then
'Cria a conexão do banco de dados
Dim ObjConnection As New OleDbConnection(StrConnection)
'Cria a string do comando sql
Dim SqlStr As String = "Insert into tblImagem(Nome,Imagem,Tamanho) values(@nome,@imagem,@tamanho)"
'Cria o objeto OleDbCommand para adicionar a string de conexão e comando sql
Dim ObjCommand As New OleDbCommand(SqlStr, ObjConnection)
'Adiciona o parametro dos objtos ao OleDbCommand
ObjCommand.Parameters.AddWithValue("@nome", TextBox1.Text)
ObjCommand.Parameters.AddWithValue("@imagem", FileUpload1.PostedFile.FileName)
ObjCommand.Parameters.AddWithValue("@tamanho", FileUpload1.PostedFile.ContentLength)
'Abri a conexão
ObjConnection.Open()
'Executa o comando no banco
ObjCommand.ExecuteNonQuery()
'Cria o camando para trazer o ultimo registro
Dim SqlMax As String = "Select Max(ID) from tblImagem"
'Cria o comando para calcular o ultimo registro
Dim ObjCommandMax As New OleDbCommand(SqlMax, ObjConnection)
'Determina o numero da imagem
Dim nMax As String = ObjCommandMax.ExecuteScalar().ToString()
'Nome temporario
nMax = nMax + ".jpeg"
'Salva o arquivo
FileUpload1.SaveAs(Server.MapPath("Imagens/" + nMax))
'Cria outra string Sql para atualiza o banco
Dim StrSqlAtualiza As String = "Update tblImagem set imagem=@imagem where id=@id"
'Cria o ObjCommand para ser executado
Dim ObjCommandAtualiza As New OleDbCommand(StrSqlAtualiza, ObjConnection)
'Adiciona os parametros
ObjCommandAtualiza.Parameters.AddWithValue("@imagem", Server.MapPath("imagens/") & nMax)
ObjCommandAtualiza.Parameters.AddWithValue("@id", ObjCommandMax.ExecuteScalar().ToString())
'Executa o comando
ObjCommandAtualiza.ExecuteNonQuery()
'fecha a conexão
ObjConnection.Close()
GridView1.DataBind()
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<p>
<br />
<br />
<br />
Nome:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1"
ErrorMessage="Campo Obrigatório">*</asp:RequiredFieldValidator>
<p>
</p>
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
EnableClientScript="False" ShowMessageBox="True" ShowSummary="False" />
<p>
Foto:
<asp:FileUpload ID="FileUpload1" runat="server" />
</p>
<p>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click"
Text="Inserir" />
</p> Aguardo seu retorno, Abraços Carlos Jr
GOSTEI 0
Régis Mello
05/03/2009
NÃO entendi, no WS não tem protect void... como assim , como vou chamar uma página pelo ws?
GOSTEI 0
[devmedia .net]
05/03/2009
Oi Régis, para ser enviado um arquivo você precisa primeiro selecioná-lo,
para selecioná-lo você deve criar uma página aspx , no aspx você coloca o método abaixo que lhe enviei,
chamando um webservice e passando o endereço do arquivo como parâmetro e o nome.
Esse método que lhe enviei é de um button se puder reparar, não existe button no ws mesmo.
O exemplo que lhe enviei para que você tenha uma idéia de como fazer,
é só implementar o mesmo código no WS.
O seu chamado está diferente do escopo pelo qual foi aberto, terá que abrir outro chamado sobre envio de imagens pelo WS, ok !?
Grande abraço
Carlos Jr
GOSTEI 0