Ir para conteúdo

POWERED BY:

Arquivado

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

Bruno Villas

Probleminha com Gridview

Recommended Posts

Olá pessoal...

 

Esse é meu primeiro post neste fórum, na verdade acompanho ele a algum tempo...

 

Mas vamos ao que interessa... Estou fazendo uma aplicaçãozinha simples em ASP.NET 2.0 (com VS 2005), por ser um controle novo não estou me entendendo muito bem com o gridview, aliás sou novato em .NET tb... rs

 

O probelma é o seguinte, o gridview é ligado a um datasource, este datasource tem um selectcommand e um updatecommand bem diferentes, o primeiro é um join entre várias tabelas, e apenas uma entra no update, esse update tem alguns parametros....

Aí eu configuro o gridview para mostrar o botão de edição, assim como as colunas todas que determinam os parametros que eu necessito para o update.

Só para ilustrar vou por o código aqui...

 

DataSource

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 			ConnectionString="<%$ ConnectionStrings:RentConnectionString2 %>"			OldValuesParameterFormatString="original_{0}"			SelectCommand=				"SELECT CPO.CpoCodCli, CPO.COD_CLIENT, cpa.CpoAno, cpa.CpoMes,					 cpa.CpoAcuDat, cpa.CpoAcuHor, cpa.CpoAcuConf, cpa.CpoAcuDatConf, 					 cp1.CmpSeq, cp1.CpoValor, CMP.CmpDsc, CMP.CmpDebCre, CMP.CmpTip,					 CMP.CmpCodPai, CMP.CmpInfDsc, CMP.CmpInt, CMP.CmpPosTel, 					 CPO.cpoAlu 				 FROM CPO 					   INNER JOIN Cliente AS cli ON CPO.COD_CLIENT = cli.cod_cliente 					   INNER JOIN CPOACU AS cpa ON CPO.CpoCodCli = cpa.CpoCodCli AND CPO.cpoAlu = cpa.cpoAlu					   INNER JOIN CPOACU1 AS cp1 ON cpa.CpoCodCli = cp1.CpoCodCli							AND cpa.cpoAlu = cp1.cpoAlu							AND cpa.CpoAno = cp1.CpoAno							AND cpa.CpoMes = cp1.CpoMes					   INNER JOIN CMP ON CMP.CmpSeq = cp1.CmpSeq				 WHERE (CPO.COD_CLIENT = @cod_client)					 AND (cpa.CpoMes = @cpomes)					 AND (cpa.CpoAno = @cpoano)				 ORDER BY CMP.CmpPosTel"			UpdateCommand=				"UPDATE CPOACU1 SET CpoValor = convert(money, @cpovalor)				 WHERE (CpoCodCli = @CpoCodCli)					AND (cpoAlu = @cpoAlu)					AND (CpoAno = @CpoAno)					AND (CpoMes = @CpoMes)					AND (CmpSeq = @CmpSeq)">			<SelectParameters>				<asp:QueryStringParameter Name="cod_client" QueryStringField="cod_client" />				<asp:QueryStringParameter Name="cpomes" QueryStringField="cpomes" />				<asp:QueryStringParameter Name="cpoano" QueryStringField="cpoano" />			</SelectParameters>			<UpdateParameters>				<asp:Parameter Name="cpovalor" />				<asp:Parameter Name="CpoCodCli" />				<asp:Parameter Name="cpoalu" />				<asp:Parameter Name="cpoano" />				<asp:Parameter Name="cpomes" />				<asp:Parameter Name="cmpseq" />			</UpdateParameters>		</asp:SqlDataSource>

GridView

<asp:GridView ID="GridView1" 			runat="server" 			CellPadding="4" 			DataSourceID="SqlDataSource1" 			ForeColor="#333333" 			GridLines="None" 			Height="20px" 			Width="845px" 			AutoGenerateColumns="False">			<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />			<Columns>				<asp:CommandField ShowEditButton="True" />				<asp:BoundField DataField="CmpDsc" HeaderText="CmpDsc" SortExpression="CmpDsc" ReadOnly="True" />				<asp:BoundField DataField="CpoValor" HeaderText="CpoValor" SortExpression="CpoValor" DataFormatString="{0:n2}" HtmlEncode="False" NullDisplayText="0" />				<asp:BoundField DataField="CpoCodCli" HeaderText="CpoCodCli" SortExpression="CpoCodCli" Visible="true" />				<asp:BoundField DataField="CpoAno" HeaderText="CpoAno" SortExpression="CpoAno" Visible="true" />				<asp:BoundField DataField="CpoMes" HeaderText="CpoMes" SortExpression="CpoMes" />				<asp:BoundField DataField="CmpSeq" HeaderText="CmpSeq" SortExpression="CmpSeq" />				<asp:BoundField DataField="cpoAlu" HeaderText="cpoAlu" SortExpression="cpoAlu" />			</Columns>			<RowStyle BackColor="#EFF3FB" />			<EditRowStyle BackColor="#2461BF" />			<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />			<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />			<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />			<AlternatingRowStyle BackColor="White" />		</asp:GridView>
Pois bem, eu não preciso mostrar todas as colunas para o usuário, aí quando oculto as que não são necessárias para visualizar (porém compõe a chave necessária ao update) o gridview não consegue fazer o update, simplesemente dá ok e finge que não foi com ele, nenhuma alteração no BD...

 

Então descobri a propriedade DataKeyNames

DataKeyNames="cpocodcli, cpoano, cpomes, cmpseq, cpoalu"
Porém, acrescentando esta linha ao gridview com todas as colunas visíveis ele funciona (edita e tudo mais), ao setar visible="false" para as colunas que eu não quero mostrar, ele dá um erro muito estranho dizendo que preciso declarar a variável @cpocodcli (primeiro parametro do update...)

 

Desculpem pelo tamanho do post... Mas não consigo uma solução e o help do MSDN library não está ajudando...

Se alguém puder me ajudar mando uma garrafa de Espumante pelo correio... :natalbiggrin:

 

Abraços e Feliz ano novo a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido!

 

O problema não era no GridView e sim no SqlDataSource...

 

O código que o VS2005 gerou para ele continha essa propriedade:

OldValuesParameterFormatString="original_{0}"

Depois de muita pesquisa resolvi testar ela assim:

OldValuesParameterFormatString="{0}"

E funcionou!

 

 

Bom, o espumante vai ficar pra mim mesmo... hehehehe

 

Valeu galera, abraços....

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.