Jump to content

Archived

This topic is now archived and is closed to further replies.

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;

}

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.