Jump to content

[Resolvido] Preencher as labels a partir da Datagrid


vascoc
 Share

Recommended Posts

Boas, tenho tido um erro, tenho um form deste género:

http://img9.imageshack.us/img9/2838/ffffkk.png

Gostaria de preencher as labels que se encontram sem texto na groupbox, confrome a linha que escolho na datagrid, mas tenho mal feito no preencher_labels().

Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
	Try
		conn = New SqlCeConnection(My.Settings.HOTEL_DBConnectionString)
		cmd = New SqlCeCommand("SELECT  Reserva.Num_Quarto AS [Número Quarto],Tipo_Quarto.Tipo_Quarto AS [Tipo Quarto],Reserva.Estado_Reserva, Clientes.Nome_Clientes AS [Nome Cliente], Clientes.Num_Contribuinte AS [Contribuinte], Reserva.Data_Entrada, Reserva.Data_Saída, Reserva.Preco, Quartos.Tipo_Quarto, Clientes.Cod_Clientes FROM Clientes INNER JOIN Reserva ON Clientes.Cod_Clientes = Reserva.Cod_Cliente AND Clientes.Cod_Clientes = Reserva.Cod_Cliente INNER JOIN Quartos ON Reserva.Num_Quarto = Quartos.Num_Quarto AND Reserva.Num_Quarto = Quartos.Num_Quarto INNER JOIN Tipo_Quarto ON Quartos.Tipo_Quarto = Tipo_Quarto.ID_Tipo WHERE (Clientes.Nome_Clientes LIKE '%" & txtnome.Text & "%') AND  Estado_Reserva=1 ORDER BY Num_Quarto", conn)
		da = New SqlCeDataAdapter(cmd)
		ds = New DataSet()
		'   Dim dr As SqlCeDataReader = cmd.ExecuteReader()
		With conn
			If .State = ConnectionState.Open Then 'ta aberto
				.Close() ' fechamos
			End If
			.Open() ' abrimos a conexao
		End With
		da.Fill(ds, "consulta")
		cb = New SqlCeCommandBuilder(da)
	Catch ex As Exception
		MessageBox.Show(ex.Message, "informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error)
	End Try
	datagrid_reservas.Visible = True
	Dim dr As SqlCeDataReader = cmd.ExecuteReader()
	datagrid_reservas.Width = 670
	datagrid_reservas.Height = 300
	datagrid_reservas.Columns.Clear()
	Dim n As Integer = dr.FieldCount
	Dim campo As String
	Dim k As Integer
	For k = 0 To n - 1
		campo = dr.GetName(k)
		datagrid_reservas.Columns.Add(campo, campo)
	Next
	Dim i As Integer = 0
	While dr.Read()
		datagrid_reservas.Rows.Add(dr.Item(0), dr.Item(1), dr.Item(2), dr.Item(3), dr.Item(4), dr.Item(5), dr.Item(6), dr.Item(7), dr.Item(8), dr.Item(9))
		i = i + 1
	End While
	datagrid_reservas.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.AllCells
	datagrid_reservas.Columns(2).Visible = False
	datagrid_reservas.Columns(8).Visible = False
	datagrid_reservas.Columns(9).Visible = False
	conn.Close()
End Sub

 Private Sub datagrid_reservas_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles datagrid_reservas.CellClick
	linha = datagrid_reservas.CurrentRow.Index
	group_Dados_Reserva.Visible = True
	datagrid_reservas.Visible = False
	PictureBox1.Visible = False
	preencher_labels()
	txtnome.Visible = False
	Label1.Visible = False
	group_Dados_Reserva.Location = New Point(149, 87)
End Sub

preencher_labels() onde trato a conexão para ir buscar os valores a datagrid...

Public Sub preencher_labels()
	Try
		conn = New SqlCeConnection(My.Settings.HOTEL_DBConnectionString)
		cmd = New SqlCeCommand("SELECT  Reserva.Num_Quarto AS [Número Quarto],Tipo_Quarto.Tipo_Quarto AS [Tipo Quarto],Reserva.Estado_Reserva, Clientes.Nome_Clientes AS [Nome Cliente], Clientes.Num_Contribuinte AS [Contribuinte], Reserva.Data_Entrada, Reserva.Data_Saída, Reserva.Preco, Quartos.Tipo_Quarto, Clientes.Cod_Clientes FROM Clientes INNER JOIN Reserva ON Clientes.Cod_Clientes = Reserva.Cod_Cliente AND Clientes.Cod_Clientes = Reserva.Cod_Cliente INNER JOIN Quartos ON Reserva.Num_Quarto = Quartos.Num_Quarto AND Reserva.Num_Quarto = Quartos.Num_Quarto INNER JOIN Tipo_Quarto ON Quartos.Tipo_Quarto = Tipo_Quarto.ID_Tipo WHERE (Clientes.Nome_Clientes LIKE '%" & linha & "%') AND  Estado_Reserva=1 ORDER BY Num_Quarto", conn)
		da = New SqlCeDataAdapter(cmd)
		ds = New DataSet()
		With conn
			If .State = ConnectionState.Open Then
				.Close()
			End If
			.Open()
		End With
		da.Fill(ds, "consulta")
	Catch ex As Exception
		MessageBox.Show(ex.Message, "informação do sistema", MessageBoxButtons.OK, MessageBoxIcon.Error)
	End Try
	tr = ds.Tables("consulta").Rows.Count
	Nome_ClientesLabel1.Text = ds.Tables("consulta").Rows(linha).Item(1)
	Num_ContribuinteLabel1.Text = ds.Tables("consulta").Rows(linha).Item(1)
	Num_QuartoLabel1.Text = ds.Tables("consulta").Rows(linha).Item(1)
	Tipo_QuartoLabel1.Text = ds.Tables("consulta").Rows(linha).Item(1)
	PrecoLabel1.Text = ds.Tables("consulta").Rows(linha).Item(1)
End Sub
Edited by Caça
Link to comment
Share on other sites

Para já, o seu código tem coisas estranhas:

Em primeiro lugar na conexão à base de dados, verifica o seu state e diz que se estiver open (aberto), fecha-o (close) e depois volta a abrir (open), isto aparentemente não faz sentido, provavelmente o correcto é verificar se o state está close, e se está close, abre-o (open).

Em segundo lugar, se pretende preencher as labels, quando seleccionar um registo da datagrid, não precisa consultar novamente a base de dados.

Tente:

label1.text=datagridview.SelectedRow.Cells(1).text.

Em que é passado, o valor, que consta na célula 1 (a 1ª célula tem o valor 0) da datagrid.

Link to comment
Share on other sites

Em relação a conexão, foi assim que o meu professor me ensinou e fiz sempre e nunca tive problemas...

Segundo o seu código...

Error 1 'SelectedRow' is not a member of 'System.Windows.Forms.DataGridView'.

Nome_ClientesLabel1.Text = datagrid_reservas.SelectedRow.Cells(1).text

Link to comment
Share on other sites

Já consegui, mas agora só me passa os valores da primeira linha da DATAGRID... mesmo que clique noutra linha

Nome_ClientesLabel1.Text = datagrid_reservas.Item(3, linha).Value
 Num_QuartoLabel1.Text = datagrid_reservas.Item(0, linha).Value
 Tipo_QuartoLabel1.Text = datagrid_reservas.Item(1, linha).Value
 Num_ContribuinteLabel1.Text = datagrid_reservas.Item(9, linha).Value
 PrecoLabel1.Text = datagrid_reservas.Item("Preco", linha).Value
Edited by Caça
Link to comment
Share on other sites

Tente da seguinte forma:

If datagridview.SelectedRows.Count<>1 then

msgbox("Tem de seleccionar o registo por completo")

exit sub

else

label1.text= datagridview.SelectedRows(0).Cells(1).Value

End If

O que este código vai fazer é em primeiro lugar irá obrigar o utilizador a seleccionar por completo uma linha da datagridview, pois só assim, é possivel passar os dados das várias células (Cells(0),Cells(1),...), porque se o utilizador só seleccionar uma célula, só o valor dessa célula é que é passado e em seguida é atribuir á propriedade text das labels os valores da várias células da datagridview, não esquecer que a 1ª célula de uma linha da datagridview tem o indice 0 ( Cells(0) ).

Edited by Cerzedelo
Link to comment
Share on other sites

Já resolvi o problema, tanto dessa maneira como da que usei funcionou, eu tinha o código depois da conexão, foi só tirar e meter no evento CellClick:

Private Sub datagrid_reservas_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles datagrid_reservas.CellClick
 linha = datagrid_reservas.CurrentRow.Index

 Nome_ClientesLabel1.Text = datagrid_reservas.Item(3, linha).Value
 Num_QuartoLabel1.Text = datagrid_reservas.Item(0, linha).Value
 Tipo_QuartoLabel1.Text = datagrid_reservas.Item(1, linha).Value
 Num_ContribuinteLabel1.Text = datagrid_reservas.Item(9, linha).Value
 PrecoLabel1.Text = datagrid_reservas.Item("Preco", linha).Value
End Sub

Resolvido

Edited by Caça
GeSHi
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.