Jump to content

Archived

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

cintiadel

[Resolvido] if com label do gridview

Recommended Posts

poxa, valeu agora funcionou...

mas apareceu outro problema, com os campos juros e multa, eles estavam aparecendo em todos os itens do grid, mas eles devem seguir o criterio da data ou do label, pois se tiver em atraso, ele mostra, senao não exibe.

mas ele ate funcionou, mas tah mostrando o mesmo valor pra todas as linhas e n é, cada uma é um valor, sabe como me ajudar?

 

While situacao.Read()
			If e.Row.RowType = DataControlRowType.DataRow Then
				If ((CType(e.Row.Cells(1).Text, DateTime) < Date.Now)) Then
					lbl_multa.Text = situacao("multa")
					lbl_juros.Text = situacao("juros")
					lbl_situacao.Text = "Em atraso"
				ElseIf ((CType(e.Row.Cells(1).Text, DateTime) >= Date.Now)) Then
					lbl_multa.Text = "-"
					lbl_juros.Text = "-"
					lbl_situacao.Text = "Em aberto"
				End If
			End If
		End While

Share this post


Link to post
Share on other sites

Pode colocar o código inteiro? Parece um problema de lógica, a variavel situacao é um DataReader?

 

Att,

Guilherme Oenning

Share this post


Link to post
Share on other sites

Pode colocar o código inteiro? Parece um problema de lógica, a variavel situacao é um DataReader?

 

Att,

Guilherme Oenning

Protected Sub gvw_View_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvw_View.RowDataBound

		Dim conexao As New Data.SqlClient.SqlConnection("stringdeconexao")
		Dim comando As New Data.SqlClient.SqlCommand
		Dim situacao As Data.SqlClient.SqlDataReader

		Dim lbl_multa As Label = CType(e.Row.FindControl("lbl_multa"), Label)
		Dim lbl_juros As Label = CType(e.Row.FindControl("lbl_juros"), Label)
		Dim lbl_situacao As Label = CType(e.Row.FindControl("lbl_situacao"), Label)

		conexao.Open()
		comando.Connection = conexao
		comando.CommandText = "Select valorpar * 0.02 as multa, (valorpar * 0.000333)* (DateDiff(day, dtvcto,GETDATE())) as juros from tabela1 inner join tabela2 ON tabela2.codigo = tabela1.al_codigo where tabela2.codigo='" & Session("ra") & "'"
		situacao = comando.ExecuteReader()

		While situacao.Read()
			If e.Row.RowType = DataControlRowType.DataRow Then
				If ((CType(e.Row.Cells(1).Text, DateTime) < Date.Now)) Then
					lbl_multa.Text = situacao("multa")
					lbl_juros.Text = situacao("juros")
					lbl_situacao.Text = "Em atraso"
				ElseIf ((CType(e.Row.Cells(1).Text, DateTime) >= Date.Now)) Then
					lbl_multa.Text = "-"
					lbl_juros.Text = "-"
					lbl_situacao.Text = "Em aberto"
				End If
			End If
		End While
		conexao.Close()
	End Sub

Share this post


Link to post
Share on other sites

Vamos por partes.

1) A condição "if e.Row.RowType = DataControlRowType.DataRow Then" deve ser feita antes de tudo.

2) O evento gvw_View_RowDataBound é disparado para cada linha da grid. E para cada linha do grid você está executando o comando SQL e varrendo até o final.

Seu comando SQL deveria trazer apenas um registro, faça um filtro maior, ai leia o DataReader apenas uma vez e jogue no label.

 

Conseguiu entender?

 

Att,

Guilherme Oenning.

Share this post


Link to post
Share on other sites

Vamos por partes.

1) A condição "if e.Row.RowType = DataControlRowType.DataRow Then" deve ser feita antes de tudo.

2) O evento gvw_View_RowDataBound é disparado para cada linha da grid. E para cada linha do grid você está executando o comando SQL e varrendo até o final.

Seu comando SQL deveria trazer apenas um registro, faça um filtro maior, ai leia o DataReader apenas uma vez e jogue no label.

 

Conseguiu entender?

 

Att,

Guilherme Oenning.

como eu faço pra q ele pegue a o numero da parcela do grid na consulta sql?

mesmo assim mudando aquele linha q você falou n funcionou

Share this post


Link to post
Share on other sites

Vamos por partes.

1) A condição "if e.Row.RowType = DataControlRowType.DataRow Then" deve ser feita antes de tudo.

2) O evento gvw_View_RowDataBound é disparado para cada linha da grid. E para cada linha do grid você está executando o comando SQL e varrendo até o final.

Seu comando SQL deveria trazer apenas um registro, faça um filtro maior, ai leia o DataReader apenas uma vez e jogue no label.

 

Conseguiu entender?

 

Att,

Guilherme Oenning.

preciso q ele calcule o juros de acordo com a parcela, mas n to sabendo qual parametro usar pra q ele faça o calculo????

Share this post


Link to post
Share on other sites

O numero da parcela está na grid? você sabe em que coluna?

Você consegue acessar o valor neste método (gvw_View_RowDataBound) usando e.Row.Cells[indice].Text onde indice é o índice que está o valor que você precisa.

O resto é regra de negócio, não sei como está sendo aplicado o juros.

 

Att,

Guilherme Oenning

Share this post


Link to post
Share on other sites

O numero da parcela está na grid? você sabe em que coluna?

Você consegue acessar o valor neste método (gvw_View_RowDataBound) usando e.Row.Cells[indice].Text onde indice é o índice que está o valor que você precisa.

O resto é regra de negócio, não sei como está sendo aplicado o juros.

 

Att,

Guilherme Oenning

nao estava mas eu coloquei, agora esta no indice 1

mas continuo com duvida, q é como passar esse valor ou melhor usar como parametro para o calculo do juros no select

Share this post


Link to post
Share on other sites

Dentro do evento RowDataBound, você pode fazer assim:

string sql = "SELECT JUROS FROM CONTAS WHERE PARCELA = " + e.Row.Cells[1].Text;
Ai depois disso você executa o SQL e o retorno você joga em alguma coluna da grid:

e.Row.Cells[4].Text = juros; //Essa variavel aqui vai ter o resultado do SQL acima

Só montar a estrutura.

Share this post


Link to post
Share on other sites

Dentro do evento RowDataBound, você pode fazer assim:

string sql = "SELECT JUROS FROM CONTAS WHERE PARCELA = " + e.Row.Cells[1].Text;
Ai depois disso você executa o SQL e o retorno você joga em alguma coluna da grid:

e.Row.Cells[4].Text = juros; //Essa variavel aqui vai ter o resultado do SQL acima

Só montar a estrutura.

esta dando erro Cannot find either column "e" or the user-defined function or aggregate "e.Row.Cells", or the name is ambiguous.

Share this post


Link to post
Share on other sites

Você está usando Visual Studio para desenvolver?

A variável "e" é um parâmetro do evento RowDataBound, você está usando este evento?

Share this post


Link to post
Share on other sites

Você está usando Visual Studio para desenvolver?

A variável "e" é um parâmetro do evento RowDataBound, você está usando este evento?

tenha um serio problema com aspas dupla e aspas simples...hehehehe

já resolvi tava certo do jeito q você falou, obrigadaaaaaa

Share this post


Link to post
Share on other sites

×

Important Information

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