Trabalhando com o WebUser Control
Olá,
Nas minhas aplicações, algumas vezes preciso trabalhar com vários sistemas em uma mesma Página Web, normalemnte para realizar pesquisas em várias tabelas e trazer resultados,
por exemplo como um cadastro de pedido,
é necessário o Cliente, o Vendedor, os Produtos.
o WebUserControl resolve este meu problema??? ele evita vários POSTBACK nas páginas??
minha maior dúvida na tentativa que fiz foi o seguinte?
Como conseguir enviar um código ( ou campo determinado) para o WebUser Control?
Como conseguir que esta página que enviou o Campo receba o resultado determinado do User Control ( como uma linha de grid por exemplo?
Nas minhas aplicações, algumas vezes preciso trabalhar com vários sistemas em uma mesma Página Web, normalemnte para realizar pesquisas em várias tabelas e trazer resultados,
por exemplo como um cadastro de pedido,
é necessário o Cliente, o Vendedor, os Produtos.
o WebUserControl resolve este meu problema??? ele evita vários POSTBACK nas páginas??
minha maior dúvida na tentativa que fiz foi o seguinte?
Como conseguir enviar um código ( ou campo determinado) para o WebUser Control?
Como conseguir que esta página que enviou o Campo receba o resultado determinado do User Control ( como uma linha de grid por exemplo?
Fernando Reis
Curtidas 0
Respostas
Luiz Maia
22/01/2010
Tem varias maneiras Fernando, a mais aconselhada é usar um interface para isto.
Faça um classe de interface para o uc:
public interface IDados
{
string Valor { get; set; }
} Implemente a interface no seu ASCX:
public partial class Dados : System.Web.UI.UserControl, IDados
{
public string Valor
{
get
{
return this.Label1.Text;
}
set
{
this.Label1.Text = value;
}
}
}
Na sua página ASPX, faz:
protected void Page_Load(object sender, EventArgs e)
{
Control ctl = LoadControl("Dados.ascx");
IDados d = ctl as IDados;
if (d != null)
d.Valor = "Israel"; this.Controls.Add(ctl);
} Outra mais facil é criar uma Propriedade (get set) e jogar o valor dentro desta propriedade. Outra forma é passar o parametro explicitamente via querystring. Abraços Att Luiz MAia
{
string Valor { get; set; }
} Implemente a interface no seu ASCX:
public partial class Dados : System.Web.UI.UserControl, IDados
{
public string Valor
{
get
{
return this.Label1.Text;
}
set
{
this.Label1.Text = value;
}
}
}
Na sua página ASPX, faz:
protected void Page_Load(object sender, EventArgs e)
{
Control ctl = LoadControl("Dados.ascx");
IDados d = ctl as IDados;
if (d != null)
d.Valor = "Israel"; this.Controls.Add(ctl);
} Outra mais facil é criar uma Propriedade (get set) e jogar o valor dentro desta propriedade. Outra forma é passar o parametro explicitamente via querystring. Abraços Att Luiz MAia
GOSTEI 0
Fernando Reis
22/01/2010
Luiz,
Apanhei feio!! kkkkk
veja só quero criar uma Consulta de empresa e assim poder usar esta em várias páginas ok?
se manda por querystring, tenho que definir em todo o momento o nome das páginas.
por isto pensei em referenciar um campo da pagina aspx e retornar o valor do select feito no ascx.
Veja até onde cheguei em um exemplo vem simples:
default.aspx:
HTML
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Src="~/uc_Company.ascx" TagName="FindCompany" TagPrefix="uc1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
Company :
<asp:TextBox ID="txtCompany" runat="server"></asp:TextBox>
<asp:ImageButton ID="ImageButton1" runat="server" Height="17px"
ImageUrl="~/viewmag+.png" Width="19px" />
<asp:Panel ID="Panel1" runat="server">
<uc1:FindCompany ID="find1" runat="server" />
</asp:Panel>
</div>
</form>
</body>
</html>
code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Control ctl = LoadControl("uc_Company.ascx");
IDados d = ctl as IDados; (aqui ele não encontra o IDados)
if (d != null)
d.Valor = "Israel";
this.Controls.Add(ctl);
}
}
uc_Company.ascx
HTML
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="uc_Company.ascx.cs" Inherits="uc_Company" %>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="CustomerID" DataSourceID="dsCompany">
<Columns>
<asp:CommandField ShowSelectButton="True" />
<asp:BoundField DataField="CustomerID" HeaderText="CustomerID" ReadOnly="True"
SortExpression="CustomerID" />
<asp:BoundField DataField="CompanyName" HeaderText="CompanyName"
SortExpression="CompanyName" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="dsCompany" runat="server"
ConnectionString="<%$ ConnectionStrings:csNorthWind %>"
SelectCommand="SELECT [CustomerID], [CompanyName] FROM [Customers]">
</asp:SqlDataSource>
CODE:
(DE ACORDO COM O EXEMPLO QUE ME MANDOU, MAS NÃO SEI SE ESTA CORRETO)
public interface IDados ( ESTA PARTE TEM QUE IR EM LOCAL SEPARADO?)
{
string Valor { get; set; }
}
public partial class uc_Company : System.Web.UI.UserControl,IDados
{
public string Valor
{
get
{
return this.GridView1.SelectedRow.Cells[1].Text.ToString();
}
set
{
this..GridView1.SelectedRow.Cells[1].Text.ToString() = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
Quero muito enteder o conceito de enviar e receber os parâmetros pois acredito ser mais fácil sua utilização,
Obrigado pela ajuda,
no Seu Aguardo!
Apanhei feio!! kkkkk
veja só quero criar uma Consulta de empresa e assim poder usar esta em várias páginas ok?
se manda por querystring, tenho que definir em todo o momento o nome das páginas.
por isto pensei em referenciar um campo da pagina aspx e retornar o valor do select feito no ascx.
Veja até onde cheguei em um exemplo vem simples:
default.aspx:
HTML
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Src="~/uc_Company.ascx" TagName="FindCompany" TagPrefix="uc1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
Company :
<asp:TextBox ID="txtCompany" runat="server"></asp:TextBox>
<asp:ImageButton ID="ImageButton1" runat="server" Height="17px"
ImageUrl="~/viewmag+.png" Width="19px" />
<asp:Panel ID="Panel1" runat="server">
<uc1:FindCompany ID="find1" runat="server" />
</asp:Panel>
</div>
</form>
</body>
</html>
code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Control ctl = LoadControl("uc_Company.ascx");
IDados d = ctl as IDados; (aqui ele não encontra o IDados)
if (d != null)
d.Valor = "Israel";
this.Controls.Add(ctl);
}
}
uc_Company.ascx
HTML
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="uc_Company.ascx.cs" Inherits="uc_Company" %>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="CustomerID" DataSourceID="dsCompany">
<Columns>
<asp:CommandField ShowSelectButton="True" />
<asp:BoundField DataField="CustomerID" HeaderText="CustomerID" ReadOnly="True"
SortExpression="CustomerID" />
<asp:BoundField DataField="CompanyName" HeaderText="CompanyName"
SortExpression="CompanyName" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="dsCompany" runat="server"
ConnectionString="<%$ ConnectionStrings:csNorthWind %>"
SelectCommand="SELECT [CustomerID], [CompanyName] FROM [Customers]">
</asp:SqlDataSource>
CODE:
(DE ACORDO COM O EXEMPLO QUE ME MANDOU, MAS NÃO SEI SE ESTA CORRETO)
public interface IDados ( ESTA PARTE TEM QUE IR EM LOCAL SEPARADO?)
{
string Valor { get; set; }
}
public partial class uc_Company : System.Web.UI.UserControl,IDados
{
public string Valor
{
get
{
return this.GridView1.SelectedRow.Cells[1].Text.ToString();
}
set
{
this..GridView1.SelectedRow.Cells[1].Text.ToString() = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
Quero muito enteder o conceito de enviar e receber os parâmetros pois acredito ser mais fácil sua utilização,
Obrigado pela ajuda,
no Seu Aguardo!
GOSTEI 0
Luiz Maia
22/01/2010
Fernando,
Vou montar um exemplo prático e te mando o link para baixar, ok?
Abraços
Att
Luiz Maia
GOSTEI 0
Fernando Reis
22/01/2010
grande Luiz,
Não se esqueça de mim, ok
kk
Não se esqueça de mim, ok
kk
GOSTEI 0
Luiz Maia
22/01/2010
Ola Fernando,
Esta aqui funcionando. Execute o projeto, preencha dados na Textbox, que se encontra no UC, e depois clique no botão. Verá que o valor da Textbox do UC passa para a Label dentro do Form.
http://video.devmedia.com.br/discovirtual/200237/TesteUserControl.zip
Caso não entenda alguma coisa, me diga, ok?
Abraços
Att
Luiz Maia
GOSTEI 0
Fernando Reis
22/01/2010
Luiz,
Desculpe, mas não é o que preciso,
Acredito não ter me expressado bem.
Voce tem um banco northwind??? posso postar um exemplo bem simples??
Desculpe, mas não é o que preciso,
Acredito não ter me expressado bem.
Voce tem um banco northwind??? posso postar um exemplo bem simples??
GOSTEI 0
Luiz Maia
22/01/2010
Pode me passar que instalo aqui o NorthWind sem problemas.
GOSTEI 0
Fernando Reis
22/01/2010
Vou fazer um simples com os detalhes de como Preciso,
GOSTEI 0
Fernando Reis
22/01/2010
Luiz.
Coloquei um exemplo utilizado o ModalPopUpExtender,
oque eu quero fazer é o mesmo exemplo, só que invés de usar o Panel e o próprio Modal, quero transformar este em WebUserControl,
Motivo: esta "pesquisa de empresa" vou precisar usar em outras páginas onde o resultado será a retorno do campo "EMPRESA".
Obrigado,
link: http://video.devmedia.com.br/discovirtual/175404/WebUser/WebUserControl-I.zip
Coloquei um exemplo utilizado o ModalPopUpExtender,
oque eu quero fazer é o mesmo exemplo, só que invés de usar o Panel e o próprio Modal, quero transformar este em WebUserControl,
Motivo: esta "pesquisa de empresa" vou precisar usar em outras páginas onde o resultado será a retorno do campo "EMPRESA".
Obrigado,
link: http://video.devmedia.com.br/discovirtual/175404/WebUser/WebUserControl-I.zip
GOSTEI 0
Luiz Maia
22/01/2010
Blz, Fernando, vou dar uma olhada aqui e assim que tiver uma resposta, posto aqui ok?
Abraços
Att
Luiz Maia
GOSTEI 0
Luiz Maia
22/01/2010
Fernando,
Dei uma olhada aqui e é o seguinte:
Não tem como colocar so o painel dentro do UC, pois vc precisa do ID botão para acionar o modal.
Por que você não coloca tudo la dentro, inclusive o textbox de empresa e depois é so usar o exemplo que te passei abaixo para recuperar a empresa, pode tambem usar um input type hidden para guardar o ID da empresa selecionada, ok?
Veja o exemplo:
http://video.devmedia.com.br/discovirtual/200237/WebUserControl-I.zip
Abraços
Att
Luiz Maia
Abraços
Att
Luiz Maia
GOSTEI 0
Fernando Reis
22/01/2010
Vou testar Luiz,
Grato
Grato
GOSTEI 0
Luiz Maia
22/01/2010
Ok. Fico no aguardo Fernando.
Abraços
Att
Luiz Maia
GOSTEI 0
Luiz Maia
22/01/2010
E ai Fernando, como esta indo?
GOSTEI 0
Luiz Maia
22/01/2010
Fernando, como não obtivemos resposta, estamos concluindo o chamado.
Sinta-se a vontade para reabri-lo caso a duvida persista, ok?
Abraços
Att
Luiz Maia
Luiz Maia
GOSTEI 0
Fernando Reis
22/01/2010
Olá.
tenho este scritp em minha Página
CODE:
<script type="text/javascript">
/*
Array bidimensonal com as fotos e informações da cada empreendimento.
Cada vetor interno possui a seguinte estrutura:
- Elementos 0 - 3 : fotos do empreendimento
- Elemento 4 : nome do empreendimento
- Elemento 5 : link para informações do empreendimento, com url "query string" (o ? e tudo após o nome da página) com o id do empreendimento
*/
var arrayEmpreendimentos = new Array(
new Array(
"jd_higienopolis/02_empreendimento_(development)/gde/0121_-_pergalado_full.jpg",
"jd_higienopolis/02_empreendimento_(development)/gde/0394_-_portaria_full.jpg",
"jd_higienopolis/02_empreendimento_(development)/gde/0470_-_hall_social_full.jpg",
"jd_higienopolis/02_empreendimento_(development)/gde/0630_-_fachada_full.jpg",
"Jardim Higienópolis",
"empreendimentoDetalhe_fichaTecnica.aspx?id=1"
),
new Array(
"maison_ephigenio_salles/02_empreendimento_(development)/03_implantacao_site_plan_full.jpg",
"maison_ephigenio_salles/02_empreendimento_(development)/04_hall_lobby_full.jpg",
"maison_ephigenio_salles/02_empreendimento_(development)/05_stand_show_room_full.jpg",
"maison_ephigenio_salles/02_empreendimento_(development)/02_fachada_noturna_night_facade_full.jpg",
"Maison Ephigenio Sales",
"empreendimentoDetalhe_fichaTecnica.aspx?id=2"
)
);
// contadores e constantes
var empreendimento = 0;
var informacao = 0;
var MAX_LINHA = arrayEmpreendimentos.length - 1;
var MAX_COLUNA = 3;
$(function() {
//$("#divLoader").hide();
// inicialização
$("#divContainerConteudo").css("background", "url('images/empreendimentos/" + arrayEmpreendimentos[0][0] + "') no-repeat center center");
$("#divRodape h1").html(arrayEmpreendimentos[0][4]);
$("#divRodape a").attr("href", arrayEmpreendimentos[0][5]);
// loop interna da função, com tempo em ms.
setInterval("trocaImagem()", 5000);
});
function trocaImagem() {
$("#divLoader").show();
$('<img />').attr("src", "images/empreendimentos/" + arrayEmpreendimentos[empreendimento][informacao]).load(function(){
$("#divContainerConteudo").fadeOut("slow", function(){
$("#divContainerConteudo").css("background-image", "url('images/empreendimentos/" + arrayEmpreendimentos[empreendimento][informacao] + "')");
});
$("#divContainerConteudo").fadeIn("slow");
$("#divLoader").hide();
});
$("#divRodape h1").html(arrayEmpreendimentos[empreendimento][4]);
$("#divRodape a").attr("href", arrayEmpreendimentos[empreendimento][5]);
// faz a transição entre fotos e empreendimentos
if (informacao == MAX_COLUNA) {
informacao = 0;
empreendimento = (empreendimento == MAX_LINHA) ? 0 : empreendimento + 1;
}
else informacao++;
}
</script>
NA PARTE grifada estão informações que estao em um banco de dados,
como acrescentar estas, puxando direto do banco, quando a página abrir????
Grato pela ajuda
tenho este scritp em minha Página
CODE:
<script type="text/javascript">
/*
Array bidimensonal com as fotos e informações da cada empreendimento.
Cada vetor interno possui a seguinte estrutura:
- Elementos 0 - 3 : fotos do empreendimento
- Elemento 4 : nome do empreendimento
- Elemento 5 : link para informações do empreendimento, com url "query string" (o ? e tudo após o nome da página) com o id do empreendimento
*/
var arrayEmpreendimentos = new Array(
new Array(
"jd_higienopolis/02_empreendimento_(development)/gde/0121_-_pergalado_full.jpg",
"jd_higienopolis/02_empreendimento_(development)/gde/0394_-_portaria_full.jpg",
"jd_higienopolis/02_empreendimento_(development)/gde/0470_-_hall_social_full.jpg",
"jd_higienopolis/02_empreendimento_(development)/gde/0630_-_fachada_full.jpg",
"Jardim Higienópolis",
"empreendimentoDetalhe_fichaTecnica.aspx?id=1"
),
new Array(
"maison_ephigenio_salles/02_empreendimento_(development)/03_implantacao_site_plan_full.jpg",
"maison_ephigenio_salles/02_empreendimento_(development)/04_hall_lobby_full.jpg",
"maison_ephigenio_salles/02_empreendimento_(development)/05_stand_show_room_full.jpg",
"maison_ephigenio_salles/02_empreendimento_(development)/02_fachada_noturna_night_facade_full.jpg",
"Maison Ephigenio Sales",
"empreendimentoDetalhe_fichaTecnica.aspx?id=2"
)
);
// contadores e constantes
var empreendimento = 0;
var informacao = 0;
var MAX_LINHA = arrayEmpreendimentos.length - 1;
var MAX_COLUNA = 3;
$(function() {
//$("#divLoader").hide();
// inicialização
$("#divContainerConteudo").css("background", "url('images/empreendimentos/" + arrayEmpreendimentos[0][0] + "') no-repeat center center");
$("#divRodape h1").html(arrayEmpreendimentos[0][4]);
$("#divRodape a").attr("href", arrayEmpreendimentos[0][5]);
// loop interna da função, com tempo em ms.
setInterval("trocaImagem()", 5000);
});
function trocaImagem() {
$("#divLoader").show();
$('<img />').attr("src", "images/empreendimentos/" + arrayEmpreendimentos[empreendimento][informacao]).load(function(){
$("#divContainerConteudo").fadeOut("slow", function(){
$("#divContainerConteudo").css("background-image", "url('images/empreendimentos/" + arrayEmpreendimentos[empreendimento][informacao] + "')");
});
$("#divContainerConteudo").fadeIn("slow");
$("#divLoader").hide();
});
$("#divRodape h1").html(arrayEmpreendimentos[empreendimento][4]);
$("#divRodape a").attr("href", arrayEmpreendimentos[empreendimento][5]);
// faz a transição entre fotos e empreendimentos
if (informacao == MAX_COLUNA) {
informacao = 0;
empreendimento = (empreendimento == MAX_LINHA) ? 0 : empreendimento + 1;
}
else informacao++;
}
</script>
NA PARTE grifada estão informações que estao em um banco de dados,
como acrescentar estas, puxando direto do banco, quando a página abrir????
Grato pela ajuda
GOSTEI 0