vascoc Posted June 15, 2012 at 12:06 PM Report Share #463052 Posted June 15, 2012 at 12:06 PM (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 at 12:24 PM by Caça Link to comment Share on other sites More sharing options...
vascoc Posted June 15, 2012 at 02:07 PM Author Report Share #463085 Posted June 15, 2012 at 02:07 PM Alguma ideia ? Ainda não consegui resolver o problema.. Link to comment Share on other sites More sharing options...
Cerzedelo Posted June 15, 2012 at 06:31 PM Report Share #463160 Posted June 15, 2012 at 06:31 PM 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 at 07:32 PM Author Report Share #463322 Posted June 16, 2012 at 07:32 PM 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 at 07:37 AM Author Report Share #463573 Posted June 18, 2012 at 07:37 AM 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 at 08:42 AM Author Report Share #463579 Posted June 18, 2012 at 08:42 AM (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 at 10:28 AM by Caça Link to comment Share on other sites More sharing options...
Cerzedelo Posted June 18, 2012 at 05:17 PM Report Share #463751 Posted June 18, 2012 at 05:17 PM (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 at 05:20 PM by Cerzedelo Link to comment Share on other sites More sharing options...
vascoc Posted June 18, 2012 at 09:40 PM Author Report Share #463860 Posted June 18, 2012 at 09:40 PM (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 at 09:33 PM 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