Jump to content
  • 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

Recommended Posts

malainhocf

Olá, bom dia,

Ninguém tem uma solução para o meu problema ?

Eu terei que ver qual é a linha seleccionada e depois como se obtém o valor de um campo chamado id ?


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
rafaelsantos

Expecifica-te, coloca aí um excerto do teu código para a malta poder ajudar mais facilmente.

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other 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");}

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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");}

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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");}

Share this post


Link to post
Share on other sites
malainhocf

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


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other 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");}

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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"

Share this post


Link to post
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

×

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.