Ir para conteúdo

Arquivado

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

Lab Design

Preencher DataList

Recommended Posts

Numa página de seleção eu tenho:

 

1) um textbox onde o usuario digita um cpf com autopostback.

è feito uma busca na base de dados e se localizar o registro, deve ser preenchido um datalist com os dados recuperados da base de dados.

O detalhe é que não chega o argumento no class responsável pelo preenchimento.

Sei que algo está errado mas não consigo descobrir o motivo.

 

Já tentei de várias formas, alterando para requestquerystring e dá pau em outro lugar...

vou postar o código abaixo

 

<fieldSet>

<!-- dados do cadastro recuperado da base de dados -->

<asp:DataList ID="dlCliente" runat="server" DataSourceID="dsCliente" EnableViewState="False" style="width:100%">

<ItemTemplate>

<table cellpadding="2" cellspacing="2" >

<tr>

<td class="label">Empresa:</td>

<td style="font-weight:bold">

<asp:Label ID="label1" runat="server" Text='<%# Eval("empresa") %>'/></td>

<td class="label">CNPJ:</td>

<td style="font-weight:bold">

<asp:Label ID="label2" runat="server" Text='<%# Eval("cnpj") %>'/></td>

</tr>

<tr>

<td class="label">Ender.:</td>

<td style="font-weight:bold">

<asp:Label ID="label3" runat="server" Text='<%# Eval("ender") %>'/> </td>

<td class="label">CEP:</td>

<td style="font-weight:bold">

<asp:Label ID="label4" runat="server" Text='<%# Eval("cep") %>'/> </td>

</tr>

<tr>

<td class="label">Bairro:</td>

<td style="font-weight:bold">

<asp:Label ID="label5" runat="server" Text='<%# Eval("bairro") %>'/> </td>

<td class="label">Cidade:</td>

<td style="font-weight:bold">

<asp:Label ID="label6" runat="server" Text='<%# Eval("cidade") %>'/> / 

<asp:Label ID="label7" runat="server" Text='<%# Eval("uf") %>'/>

</td>

</tr>

<tr>

<td class="label">E-mail:</td>

<td style="font-weight:bold">

<asp:Label ID="label8" runat="server" Text='<%# Eval("email") %>'/> </td>

<td class="label">Contato:</td>

<td style="font-weight:bold">

<asp:Label ID="label9" runat="server" Text='<%# Eval("contato") %>'/> </td>

</tr>

</table>

</ItemTemplate>

</asp:DataList>

 

 

<!-- mostra mensagem de nao encontrado -->

<asp:Label ID="notFound" CssClass="legenda" style="color:#fe0000" runat="server" />

 

<asp:ObjectDataSource ID="dsCliente" runat="server" TypeName="Ridgid.Clientes" SelectMethod="SelectByCNPJ" >

<SelectParameters>

<asp:ControlParameter ControlID="frmAdd" Name="cnpj" Type="String" />

</SelectParameters>

</asp:ObjectDataSource>

 

 

<!-- dados que serão gravados apos preencher todos os campos -->

<legend class="legenda">Preencha os Dados abaixo</legend>

 

<asp:FormView ID="frmAdd"

style="border:solid 4px #d0d0d0"

DefaultMode="Insert"

DataSourceID="srcNotaFiscal"

OnItemInserted="frmAdd_ItemInserted"

OnItemCommand="frmAdd_ItemCommand"

HorizontalAlign="Center"

runat="server">

 

 

<InsertItemTemplate>

<table id="tbForm" border="0" cellpadding=0 cellspacing=2 width="550">

<tr>

<td class="label">CNPJ:</td>

<td bgcolor=#efefef>

<asp:TextBox CssClass="required" id="cnpj" width="120px" maxLength="18" style="text-align:center" Text='<%# Bind("cnpj") %>' Runat="server" AutoPostBack="true" />

</td>

</tr>

<tr>

<td class="label">Nota Fiscal:</td>

<td bgcolor=#efefef>

<div style="float:left">

<asp:TextBox CssClass="required" id="notaFiscal" width="80px" maxLength="6" style="text-align:center" Text='<%# Bind("notaFiscal") %>' Runat="server"/>

</div>

<div style="float:right">

<span class="label">Data da Emissão:</span>

<asp:TextBox CssClass="required" id="dataEmi" width="80px" maxLength="10" style="text-align:center" Text='<%# Bind("dataEmi") %>' Runat="server"/>

</div></td>

</tr>

<tr>

<td class="label">Vendedor:</td>

<td bgcolor=#efefef>

<asp:DropDownList ID="idUsuario" CssClass="combos" runat="server" DataSourceID="dsUsuarios"

DataTextField="nome" DataValueField="idUsuario" Text='<%# Bind("idUsuario") %>' />

<asp:ObjectDataSource ID="dsUsuarios" runat="server" SelectMethod="SelectByEquipe"

TypeName="Ridgid.Usuarios"/></td>

</tr>

<tr>

<td colspan=2>

<asp:Label ID="MsgError" Text="" runat="server" /></td>

</tr>

<tr>

<td style="text-align:center" colspan="2">

<asp:Button ID="btn_Add" CssClass="btnOk" style="margin:4px 30px" width="100px"

Text="Enviar" CommandName="Insert" runat="server" /></td>

</tr>

</table>

</InsertItemTemplate>

</asp:FormView>

</fieldSet>

<!-- bloco insert -->

 

 

<asp:ObjectDataSource

id="srcNotaFiscal"

TypeName="Ridgid.NotasFiscais"

SelectMethod="Select"

InsertMethod="Insert"

OnInserted="srcNotaFiscal_Inserted" Runat="server">

 

<SelectParameters>

<asp:Parameter Name="cnpj" Type="string" />

</SelectParameters>

 

<InsertParameters>

<asp:Parameter Name="idUsuario" Type="Int32" />

<asp:Parameter Name="notaFiscal" Type="Int32" />

<asp:Parameter Name="dataEmi" Type="string" />

<asp:Parameter Name="cnpj" Type="string" />

<asp:Parameter DefaultValue="0" Name="idCliente" Type="Int32" />

</InsertParameters>

</asp:ObjectDataSource>

Eu até coloquei o campo cnpj no insertparameters e no select pra ver se resolvia mas quando clico no botão enviar com o campo cnpj preenchido o que acontece:

 

protected void frmAdd_ItemCommand(object sender, FormViewCommandEventArgs e)

{

TextBox cnpj = (TextBox)frmAdd.FindControl("cnpj");

if (cnpj != null)

{

dlCliente.DataBind();

}

}

Neste bloco eu verifico que o cnpj está la.

 

o DataBind chama o class abaixo porém o cnpj chega null:

 

[system.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjec

tMethodType.Delete, true)]

public static Clientes SelectByCNPJ(string cnpj)

{

Clientes result = null;

 

if (cnpj != null)

{

// Initialize command

SqlConnection con = new SqlConnection(_connectionString);

SqlCommand cmd = new SqlCommand("Clientes_SelectByCNPJ", con);

cmd.CommandType = CommandType.StoredProcedure;

 

// Initialize parameters

cmd.Parameters.AddWithValue("@cnpj", cnpj);

using (con)

{

con.Open();

SqlDataReader reader = cmd.ExecuteReader();

if (reader.Read())

result = new Clientes(reader);

}

}

return result;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi quintelab

 

Ele chega todo null.

 

Eu ja achei uma solução aqui. vou pegar por request no datasource forçando no behind dessa forma:

 

protected void frmAdd_ItemCommand(object sender, FormViewCommandEventArgs e)

{

if (Request.QueryString["cnpj"] != null)

{

dlCliente.DataBind();

}

else

{

TextBox cnpj = (TextBox)frmAdd.FindControl("cnpj");

if (cnpj != null)

Response.Redirect("Seleciona.aspx?id=14&cnpj="+cnpj.Text);

}

}

Sei que não é o mais correto mas já tentei de todas as formas possiveis.

Se eu uso o

 

<asp:ControlParameter ControlID="srcNotaFiscal" Name="cnpj" PropertyName="SelectedValue" Type="string" />

 

ele reclama que o datasource nao tem o SelectedValue

 

Se eu removo o PropertyName, ele reclama que precisa, intao num sei outra forma senao forçar no reload mas valeu pela tentativa.

Usando o request da forma acima eu forço o reload da pagina, ai ele carrega o cnpj e chama a SP sem problemas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza quintelab, resolvi da maneira que deveria ser feito, porém nao consegui uma forma de informar o usuario, caso a busca retorne sem sucesso.

 

<asp:ObjectDataSource ID="dsCliente" runat="server" TypeName="Ridgid.Clientes" SelectMethod="SelectByCNPJ" OldValuesParameterFormatString="original_{0}">

<SelectParameters>

<asp:ControlParameter Name="cnpj" ControlId="txt_cnpj"/>

</SelectParameters>

</asp:ObjectDataSource>

ficou dessa forma e esta funfando, separei o textbox do formview e coloquei um buttom. Quando ele acha o registro ele mostra o datalist, quando não, não mostra nada. Não é a solução perfeita ainda né mas vou continuar buscando uma forma de verificar se a busca nao retornou registros e informar um label.

 

Agora o que ta pegando aqui é que uma vez retornado o registro da busca, o idCliente também retorna e acredito que no dsCliente né. Como eu preciso passar esse parametro para o insert eu fiz da seguinte maneira:

 

<asp:ObjectDataSource id="srcNotaFiscal" TypeName="Ridgid.NotasFiscais" SelectMethod="Select"

InsertMethod="Insert" OnInserted="srcNotaFiscal_Inserted" Runat="server">

<InsertParameters>

<asp:Parameter Name="idUsuario" Type="Int32" />

<asp:Parameter Name="notaFiscal" Type="Int32" />

<asp:Parameter Name="dataEmi" Type="string" />

<asp:ControlParameter ControlID="dlCliente" Name="idCliente" Type="Int32" />

</InsertParameters>

</asp:ObjectDataSource>

Só que mais uma vez num tá chegando nada la no class e ta gravando o registro com o campo idCliente=0.

Acho que num tem outra forma de vincular este parametro senao pelo ControlParameter ne?

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.