Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

malainhocf

Seleccionar registo num datagridview e obter o valor de um campo

Mensagens Recomendadas

malainhocf

Olá, bom dia,

Eu ainda não tenho o código

Só estou a ver como fazer isso

Vamos por partes

Eu tenho um datagridview

Esse datagridview selecciona uma linha inteira da datagridview, pode ser a 1º como a 5º ou outra.

Ao seleccionar uma linha eu clico no botão alterar e abre-me uma form para poder alterar o registo seleccionado no datagridview.

Só que ao seleccionar uma linha no datagridview eu preciso de ler qual o valor de uma coluna com cabeçalho chamado ID

Isto é, terei que ler uma celula da linha seleccionada.

Será que me fiz compreender agora ?

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Antimatéria

Eu uso o seguinte código em C# quando quero recolher só o valor de uma Célula, penso que o código não varie muito no caso de VB.net

DataGridViewRow linha;
DataGridViewCell celula;
linha= DataGridView.Rows[i];       //i é o número  da linha seleccionada
celula = linha.Cells[j];                   //j é a posição da coluna seleccionada (0 para a primeira e por ai fora)
valor_celula = celula.Value;


#include <stdio.h>main(){  printf("Hello World");}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
F_Correia

Bom dia, procura algo como NOMEDATAGRID.SelectedIndex(0).text

algo como isto, é uma questão de trabalhares com o index(0).text da data grid , o 0 é a 1º coluna.

Abraços


Porque havia eu se assinar ? A minha mãe diz que é perigoso ter as nossas assinaturas na net ! :S

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

'Para a primeira linha seleccionada
DataGridView1.SelectedRows(0).Cells(0).Value
'Para a primeira linha seleccionada ou não
DataGridView1.Rows(0).Cells(0).Value

Só tens de converter o value para o datatype que pretendes porque é devolvido como Object.

Por exemplo:

DataGridView1.Rows(0).Cells(0).Value.ToString

malainhocf, temos de reduzir e eventualmente acabar com os bumps inúteis que tens por hábito fazer.

Se tens alguma coisa a acrescentar, usa o "Modificar" sempre que possível.

Se ainda ninguém te respondeu no espaço de um dia, não são bumps, nesse intervalo, que alteram as coisas.

Não digo por PM, porque o barrete serve a mais pessoal.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malainhocf

Olá Ribeiro e restantes membros,

DataGridView1.Rows(0).Cells(0).Value.ToString

Só falta um pormenor a esse código acima

O problema é que eu não sei qual é a linha seleccionada.

Como posso resolver essa questão ?

Peço desculpa pelas mensagens que crio a mais, vou começar a editar o meu tópico.

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Por isso mesmo te dei as duas soluções.

DataGridView1.SelectedRows(0).Cells(0).Value

Não precisas de saber qual é a linha seleccionada. Ele sabe bem.

O índice serve para determinar qual é a linha que pretendes dentro das seleccionadas.

Ora, se só queres preparar para quando tens uma seleccionada, o índice é o primeiro. Logo, o zero.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malainhocf

Olá Ribeiro e restantes membros, bom dia,

DataGridView1.Rows(0).Cells(0).Value.ToString()

Se eu fizer isso só me dá o 1º linha do datagridview

É preciso seleccionar a linha sem lhe dizer que o valor é 0

Como faço isso ?

Peço desculpa por ter aberto um novo tópico

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Antimatéria

Por isso mesmo te dei as duas soluções.

DataGridView1.SelectedRows(0).Cells(0).Value

Não precisas de saber qual é a linha seleccionada. Ele sabe bem.

O índice serve para determinar qual é a linha que pretendes dentro das seleccionadas.

Ora, se só queres preparar para quando tens uma seleccionada, o índice é o primeiro. Logo, o zero.

O ribeiro já te respondeu a questão.

'Aqui sabes qual é a linha/linhas que estão seleccionadas na DataGridView

'DataGridView1.SelectedRows(0) é a primeira linha que tens seleccionada, se tiveres outras linhas seleccionadas
'para as acederes fazes DataGridView1.SelectedRows(1), DataGridView1.SelectedRows(2) e por assim adiante,

'DataGridView1.SelectedRows(0).Cells(0) é a 1º célula da primeira linha que está seleccionada

DataGridView1.SelectedRows(0).Cells(0).Value
'Devolve o objecto que se encontra na primeira célula da primeira linha seleccionada


#include <stdio.h>main(){  printf("Hello World");}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malainhocf

Olá a todos, bom dia,

Não funciona

eu não posso atribuir 0 porque pode não ser 0

Eu só posso seleccionar 1 item no datagridview

Preciso que o vb.net determine qual é a linha que o utilizador da aplicação seleccionou

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Antimatéria

Não sei se isto te serve, mas podes fazer da seguinte maneira, crias um evento quando clicas na célula que pretendes obter o conteúdo e usas o DataGridViewCellEventArgs para saberes qual foi a linha e a célula em que carregas-te.

Por exemplo:

Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs)
Dim i, j As Integer
i=e.rowIndex
j=e.columnIndex
TextBox1.Text = DataGridView1.Item(i, j).Value
End Sub


#include <stdio.h>main(){  printf("Hello World");}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Antimatéria

Eu não carrego numa celula, eu altero a linha no datagridview

Tanto posso alterar com o rato como com as teclas.

Como faço isso ?

Obrigado

Wut? Já mal percebia o que querias antes, então agora fiquei completamente perdido, explica-te melhor sff.

Que queres fazer? Alterar um valor numa determinada célula da gridview, aceder ao valor para utilizares noutro local?

Qual o teu objectivo pretendido?


#include <stdio.h>main(){  printf("Hello World");}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malainhocf

O meu objectivo é seleccionar uma familia no datagridview e clico no botão alterar

Abre-me um form para alterar a familia que seleccionei no datagridviw.

É isso eu eu pretendo.

Cada familia tem um idfamilia, eu preciso passar o idfamilia para o form onde altera a familia.


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Olá a todos, bom dia,

Não funciona

eu não posso atribuir 0 porque pode não ser 0

Eu só posso seleccionar 1 item no datagridview

Preciso que o vb.net determine qual é a linha que o utilizador da aplicação seleccionou

Obrigado

Vou tentar novamente.

Tu metes zero porque é o índice da linha dentro da colecção das linhas seleccionadas.

DataGridView1.SelectedRows(0) devolve-te a uma instância da classe DataGridViewRow, referência à primeira linha que está seleccionada no datagridview. Se só tens uma seleccionada, adivinha qual é a primeira ;)

O índice não é o número absoluto da linha, mas sim o relativo.

Neste caso, relativo às linhas seleccionadas, que no teu caso, e se só está uma seleccionada, é essa mesmo.

Não interessa se clicas, usas o teclado ou sequer se sopras para o monitor.

Se queres saber o índice dessa linha:

DataGridView1.SelectedRows(0).Index

Este índice é o índice absoluto.

Se queres fazer a verificação sempre que ocorra uma mudança de seleccção, usa o evento SelectionChanged

EDIT: Para saberes o tal idfamilia, é como já te tinha dito no início:

DataGridView1.SelectedRows(0).Cells(indice_da_coluna_idfamilia).Value
'OU
DataGridView1.SelectedRows(0).Cells("idfamilia").Value


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
malainhocf

Olá Ribeiro e restantes membros,

Percebi agora que não se trata do numero da linha mas no conjunto de linhas

Só que o meu programa não está a ir buscar o idfamilia da linha seleccionada mas sim da 1º linha

Estou a fazer algo de errado.

Não preciso do evento selectchange porque eu tenho um botão no meu form para alterar registo.

Em baixo está o código do meu form onde está o datagrid e o botão para alterar familia

------------------------------------------------------------------------------------------

Imports System.Data.SqlClient

Public Class frmFamilias

    Private Sub frmFamilias_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim connstring As String = "Data Source=.\SQLEXPRESS;AttachDbFilename='C:\sqlserver\me.mdf';" & _
  ";Integrated Security=True;User Instance=True"

        Dim conn As New SqlConnection(connstring)

        conn.Open()
        ' Aqui inicia a interação com a base de dados
        Dim sql As String
        sql = "select me_familias.idfamilia, me_familias.descricao, me_familias.idutilizador, me_utilizadores.utilizador from me_familias left outer join me_utilizadores on me_familias.idutilizador=me_utilizadores.idutilizador"

        Dim da As New SqlDataAdapter(sql, conn)

        Dim ds As New DataSet

        da.Fill(ds)

        DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
        DataGridView1.AllowUserToAddRows = False
        DataGridView1.AllowUserToDeleteRows = False
        DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically
        DataGridView1.MultiSelect = False
        DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect

        DataGridView1.DataSource = ds.Tables(0).DefaultView

        DataGridView1.Columns.Remove("idutilizador")
        DataGridView1.Columns(0).HeaderText = "ID"
        DataGridView1.Columns(1).HeaderText = "Familia"
        DataGridView1.Columns(2).HeaderText = "Utilizador"

        conn.Close()
        da = Nothing
        ds = Nothing
    End Sub

    Private Sub btnInserir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInserir.Click
        frmInsFamilia.Show()
    End Sub

    Private Sub btnActualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnActualizar.Click
        Dim connstring As String = "Data Source=.\SQLEXPRESS;AttachDbFilename='C:\sqlserver\me.mdf';" & _
  ";Integrated Security=True;User Instance=True"

        Dim conn As New SqlConnection(connstring)

        conn.Open()
        ' Aqui inicia a interação com a base de dados
        Dim sql As String
        sql = "select * from me_familias"

        Dim da As New SqlDataAdapter(sql, conn)

        Dim ds As New DataSet

        da.Fill(ds)

        DataGridView1.DataSource = ds.Tables(0).DefaultView
        DataGridView1.Refresh()

        conn.Close()
        da = Nothing
        ds = Nothing
    End Sub

    Private Sub btnAlterar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlterar.Click
        Dim varid = CInt(DataGridView1.Rows(0).Cells(0).Value.ToString())

        Dim form As New frmAltFamilia
        form.numero = varid
        form.Show()
    End Sub
End Class

------------------------------------------------------------------------------------------

O que estarei a fazer de errado ?

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

O que estarei a fazer de errado ?

Continuas a não tomar atenção.

Dim varid = CInt(DataGridView1.Rows(0).Cells(0).Value.ToString())

Dim varid = CInt(DataGridView1.SelectedRows(0).Cells(0).Value.ToString())


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.