Ir para conteúdo

Arquivado

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

Faccruz

[Resolvido] Deixar GridView mais elegante

Recommended Posts

Essa é a minha gridview hoje:

Imagem Postada

 

Quero deixar ela com AutoSize, centralizar os dados na célula. Estou preenchendo ela em runtime

 

Protected Sub btnLocaliza_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnLocaliza.Click
		gvCartelinha.DataSource = Nothing
		gvCartelinha.DataBind()

		Dim daMySQL As MySqlDataAdapter
		Dim dsMySQL As New DataSet
		Dim strSQL As String = "Select * from CARTELINHA where "

		ConMYSQL.Open()

		Try
			If rbtnList.SelectedIndex = 0 Then
				strSQL += "CPF like '%" & edtCPF.Text & "%';"
				daMySQL = New MySqlDataAdapter(strSQL, ConMYSQL)
				daMySQL.Fill(dsMySQL, "Cartelinha")
			Else
				strSQL += "NotaFiscal = " & edtNF.Text & ";" '' and DescLoja like '%" & cdLojas.SelectedValue & "%';"
				daMySQL = New MySqlDataAdapter(strSQL, ConMYSQL)
				daMySQL.Fill(dsMySQL, "Cartelinha")
			End If

			Call FormataGrid()

			gvCartelinha.AutoGenerateColumns = False
			gvCartelinha.DataSource = dsMySQL.Tables(0)
			gvCartelinha.DataBind()

			GoTo Fim

		Catch ex As Exception
			lblAvisos.Text = "Erro: " & ex.Message
			GoTo Fim
		End Try

Fim:
		ConMYSQL.Close()
		ConMYSQL = Nothing
		daMySQL = Nothing
		dsMySQL = Nothing
	End Sub

Formatando o cabeçalho da Grid

Public Sub FormataGrid()
		Dim Loja As New BoundField
		Loja.HeaderText = "Num. Loja"
		Loja.DataField = "Loja"
		gvCartelinha.Columns.Add(Loja)

		Dim DescLoja As New BoundField
		DescLoja.HeaderText = "Cidade Loja"
		DescLoja.DataField = "DescLoja"
		gvCartelinha.Columns.Add(DescLoja)

		Dim Contrato As New BoundField
		Contrato.HeaderText = "Contrato"
		Contrato.DataField = "Contrato"
		gvCartelinha.Columns.Add(Contrato)

		Dim NF As New BoundField
		NF.HeaderText = "Nota Fiscal"
		NF.DataField = "NotaFiscal"
		gvCartelinha.Columns.Add(NF)

		Dim CPF As New BoundField
		CPF.HeaderText = "CPF"
		CPF.DataField = "CPF"
		gvCartelinha.Columns.Add(CPF)

		Dim Nome As New BoundField
		Nome.HeaderText = "Nome do Cliente"
		Nome.DataField = "NomeCliente"
		gvCartelinha.Columns.Add(Nome)

		Dim Serie As New BoundField
		Serie.HeaderText = "Serie"
		Serie.DataField = "SerieCartela"
		gvCartelinha.Columns.Add(Serie)

		Dim Sorteio As New BoundField
		Sorteio.HeaderText = "Num. Sorteio"
		Sorteio.DataField = "NumCartela"
		gvCartelinha.Columns.Add(Sorteio)

	End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que você tem muitos dados na grid, tente colocar apenas o necessário. Ou você pode usar um outro tipo de objeto como o DataList.

 

Para centralizar faça:

 

TableItemStyle style = new TableItemStyle();
style.VerticalAlign = VerticalAlign.Middle;

Dai para cada objeto do tipo BoundField, adicione:

seuBoundField.ItemStyle = style;

Dica, sua grid vai sempre trazer a mesma quantidade de colunas?

Se sim, faça essa formatação na página aspx. Adicione as colunas via C# apenas quando você não souber a quantidade de colunas ou o nome, por exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi um pequeno erro que apareceu todas os campos

 

tentei esse TableItemStyle mas qndo fui setar na propriedade ItemStyle do BoundField, deu um erro ItemStyle is ReadOnly

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verdade, testei agora e deu o mesmo erro.

Faz assim:

 

BoundField bd = new BoundField();
bd.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
Ai você pode remover o uso do TableItemStyle.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais uma vez valeu

 

Agora como limpo o GridView antes de realizar a segunda pesquisa?

 

Pois qndo realizo a primeira pesquisa, traz normal, mas qndo vou executar outra pesquisa (dados diferentes) ele repete todos os dados

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso não deveria estar acontecendo.

1) Remova isso:

gvCartelinha.DataSource = Nothing
gvCartelinha.DataBind()
É desnecessário.

 

2) Coloque aqui o conteudo da página aspx.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Código da Página ASPX

Imports MySql.Data.MySqlClient
Imports System.Data

Partial Public Class _Default
	Inherits System.Web.UI.Page

	Dim ConMYSQL As New MySqlConnection("server=LocalHost;user id=root;password=cyb04ibm;database=SiteCybelar")
	Dim Index As Integer, Selecionado As String

	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

		If Not Page.IsPostBack Then

			If rbtnList.SelectedIndex = 0 Then
				pnlCPF.Visible = True
				pnlNota.Visible = False
			Else
				pnlCPF.Visible = False
				pnlNota.Visible = True
			End If

			''Carrega Cidades
			Cidades()
		End If

	End Sub

	Protected Sub rbtnList_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles rbtnList.SelectedIndexChanged
		If rbtnList.SelectedIndex = 0 Then
			pnlCPF.Visible = True
			pnlNota.Visible = False

		Else
			pnlCPF.Visible = False
			pnlNota.Visible = True

		End If
	End Sub

	Protected Sub btnLocaliza_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnLocaliza.Click

		Dim daMySQL As MySqlDataAdapter
		Dim dsMySQL As New DataSet
		Dim strSQL As String = ""

		ConMYSQL.Open()

		strSQL = "Select * from CARTELINHA"
		Try
			If rbtnList.SelectedIndex = 0 Then
				strSQL += " WHERE CPF like '%" & edtCPF.Text & "%';"
				daMySQL = New MySqlDataAdapter(strSQL, ConMYSQL)
				daMySQL.Fill(dsMySQL, "Cartelinha")
			Else
				If DropDownList1.SelectedIndex <> 0 Then
					strSQL += " WHERE NotaFiscal = " & edtNF.Text & " and Descloja LIKE '" & DropDownList1.SelectedItem.Text & "%';"
					daMySQL = New MySqlDataAdapter(strSQL, ConMYSQL)
					daMySQL.Fill(dsMySQL, "Cartelinha")
				Else
					lblAvisos.Text = "Escolha a loja"
					DropDownList1.Focus()
					Exit Sub
				End If
				
			End If

			Call FormataGrid(dsMySQL)

			lblAvisos.Text = strSQL

		Catch ex As Exception
			lblAvisos.Text = "Erro: " & ex.Message

		Finally
			ConMYSQL.Close()
			ConMYSQL = Nothing
			daMySQL = Nothing
			dsMySQL = Nothing

		End Try
	End Sub

	Public Sub FormataGrid(ByVal dsGrid As DataSet)
		Dim gvCartelinha As New GridView

		Dim Loja As New BoundField
		Loja.HeaderText = "Num. Loja"
		Loja.DataField = "Loja"
		Loja.ItemStyle.HorizontalAlign = HorizontalAlign.Center
		gvCartelinha.Columns.Add(Loja)

		Dim DescLoja As New BoundField
		DescLoja.HeaderText = "Cidade Loja"
		DescLoja.DataField = "DescLoja"
		DescLoja.ItemStyle.HorizontalAlign = HorizontalAlign.Center
		gvCartelinha.Columns.Add(DescLoja)

		Dim Contrato As New BoundField
		Contrato.HeaderText = "Contrato"
		Contrato.DataField = "Contrato"
		Contrato.ItemStyle.HorizontalAlign = HorizontalAlign.Center
		gvCartelinha.Columns.Add(Contrato)

		Dim NF As New BoundField
		NF.HeaderText = "Nota Fiscal"
		NF.DataField = "NotaFiscal"
		NF.ItemStyle.HorizontalAlign = HorizontalAlign.Center
		gvCartelinha.Columns.Add(NF)

		Dim CPF As New BoundField
		CPF.HeaderText = "CPF"
		CPF.DataField = "CPF"
		CPF.ItemStyle.HorizontalAlign = HorizontalAlign.Center
		gvCartelinha.Columns.Add(CPF)

		Dim Nome As New BoundField
		Nome.HeaderText = "Nome do Cliente"
		Nome.DataField = "NomeCliente"
		Nome.ItemStyle.HorizontalAlign = HorizontalAlign.Center
		gvCartelinha.Columns.Add(Nome)

		Dim Serie As New BoundField
		Serie.HeaderText = "Serie"
		Serie.DataField = "SerieCartela"
		Serie.ItemStyle.HorizontalAlign = HorizontalAlign.Center
		gvCartelinha.Columns.Add(Serie)

		Dim Sorteio As New BoundField
		Sorteio.HeaderText = "Num. Sorteio"
		Sorteio.DataField = "NumCartela"
		Sorteio.ItemStyle.HorizontalAlign = HorizontalAlign.Center
		gvCartelinha.Columns.Add(Sorteio)

		''Dados da Grid
		gvCartelinha.AutoGenerateColumns = False
		gvCartelinha.DataSource = dsGrid.Tables(0)
		gvCartelinha.DataBind()

		Page.Form.Controls.Add(gvCartelinha)

	End Sub

	Public Sub Cidades()
		Dim strSQL As String = "Select * from Lojas order by Descricao;"
		Dim daMySQL As New MySqlDataAdapter(strSQL, ConMYSQL)
		Dim dsLoja As New DataSet

		Try
			ConMYSQL.Open()

			daMySQL.Fill(dsLoja, "Lojas")

			DropDownList1.DataTextField = "Descricao"
			DropDownList1.DataValueField = "Descricao"

			DropDownList1.DataSource = dsLoja.Tables("Lojas").DefaultView
			DropDownList1.DataBind()

			DropDownList1.Items.Insert(0, " -- Selecione a loja -- ")
			DropDownList1.SelectedIndex = 0

		Catch ex As Exception

		Finally
			ConMYSQL.Close()
		End Try

	End Sub

End Class

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que não é viável misturar os tópicos, é melhor criar outro. Vira bagunça no tópico. Crie outro que eu excluo esse post.

 

Abraços...

 

Editei pra excluir a segunda parte do topico, só ficou o que interessava do pedido do topico anterior

Compartilhar este post


Link para o post
Compartilhar em outros sites

De uma olhada neste artigo: http://www.linhadecodigo.com.br/Artigo.aspx?id=259

 

Abraços...

 

Testei todos os formatos... nenhum funcionou... já tentei tbm DataFormatString = "{0:DDD\.DDD\.DDD\-DD}", DataFormatString = "{0:000\.000\.000\-00}", DataFormatString = "{0:0##\.###\.###\-##}"

mas nada funcionou

 

Lembando que estou criando o GridView em RunTime

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual versão do Visual Studio você esta utilizando? Se for 2008 você deve alterar a propriedade HTMLEncode do seu campo.

 

Abraços...

 

sim, é o 2008, mas é só mudar para TRUE? ou preciso fazer mais alguma coisa? Lembrando que estou criando em runtime o GridView

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deve mudar a propriedade para false e alimentar a mascara como ja estava fazendo.

Agora que lembrei que ja escrevi um artigo sobre isso: http://www.quintelab.com.br/ShowArtigos.asp?codigo=2

 

Abraços...

 

Legal seu artigo, mas estou criando o GridView em código, como faço para chamar Protected Sub GridView1_RowDataBound ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver colocando o GridView na página, mas caiu na mesma imagem do primeiro post (qndo executo uma consulta seguida da outra)

 

Usei a idéia do Artigo e acrencentei isso essa função:

 

String.Format("{0:00000000000}", Convert.ToDouble(sCPF)).Insert(9, "-").Insert(6, ".").Insert(3, ".")

Está funcionando perfeitamente.

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.