vascoc Posted June 15, 2012 Report Share Posted June 15, 2012 (edited) 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 June 15, 2012 by Caça Link to comment Share on other sites More sharing options...
vascoc Posted June 15, 2012 Author Report Share Posted June 15, 2012 Alguma ideia ? Ainda não consegui resolver o problema.. Link to comment Share on other sites More sharing options...
Cerzedelo Posted June 15, 2012 Report Share Posted June 15, 2012 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 More sharing options...
vascoc Posted June 16, 2012 Author Report Share Posted June 16, 2012 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 More sharing options...
vascoc Posted June 18, 2012 Author Report Share Posted June 18, 2012 Então, alguém sabe como corrigir o erro ? Continuo com o mesmo erro. Link to comment Share on other sites More sharing options...
vascoc Posted June 18, 2012 Author Report Share Posted June 18, 2012 (edited) 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 June 18, 2012 by Caça Link to comment Share on other sites More sharing options...
Cerzedelo Posted June 18, 2012 Report Share Posted June 18, 2012 (edited) 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 June 18, 2012 by Cerzedelo Link to comment Share on other sites More sharing options...
vascoc Posted June 18, 2012 Author Report Share Posted June 18, 2012 (edited) 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 June 19, 2012 by Caça GeSHi Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now