none
DataGridView e CheckBox RRS feed

  • Pergunta

  • Boa noite !

    Eu tenho um Datagridview com checkbox, eles assumem os valores true ou false, e no botão (confirmar) eu confirmo as alteraçoes no banco de dados.

    como faço isso? no codigo que eu tenho neste momento as vezes ele grava e as vezes não esta a gravar as alteraçoes ....

    qual a maneira correta de trabalhar com um datagridview com checkbox?

    alguem me ajuda a resolver isto? 

    obrigado...


    Daniel Rosa Iniciante de programação em vb.net, linq sql e Sql server

    domingo, 16 de março de 2014 21:51

Respostas

  • daniel, bom dia.

    Dentro da itemtemplate coloque o checkbox

    <asp:checkbox id="CheckBox1" runat="server" oncheckedchanged="CheckBox1_CheckedChanged" xmlns:asp="#unknown" />

    No seu aspx.cs

    protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
    {
    CheckBox chk = (CheckBox)sender;
    GridViewRow gr = (GridViewRow)chk.Parent.Parent;
    lblmsg.Text = GridView1.DataKeys[gr.RowIndex].Value.ToString();
     
    //lblmsg.Text = "Hello";
    } 


    Se a resposta foi útil por favor qualifique. Italo Biguzi Duarte, Desenvolvedor ASP.NET C#, Italo.biguzzi@gmail.com

    • Sugerido como Resposta Rafa sibeira segunda-feira, 17 de março de 2014 13:15
    • Marcado como Resposta danielbeneditorosa segunda-feira, 17 de março de 2014 21:53
    segunda-feira, 17 de março de 2014 12:59
  • Bom exemplificando seria mais ou menos assim:

    Tela:

    Quando Clicar no Confirmar por exemplo a rotina seria assim:

    Private Sub BtuConfirmar_Click(sender As Object, e As EventArgs) Handles Button2.Click
    	Dim Codigo As Integer = 0
    	Dim Status As Boolean = False
    	For Each row As DataGridViewRow In DataGridView2.Rows
    		If (Integer.TryParse(row.Cells(0).Value.ToString(), Codigo) AndAlso
    			Boolean.TryParse(row.Cells(2).Value.ToString(), Status)) Then
    			GravarNoBanco(Codigo, Status) 'Sub que grava no banco ...
    		End If
    	Next
    End Sub
    
    Public Sub GravarNoBanco(Codigo As Integer, Status As Boolean)
    	'programe aqui a rotina de gravação ...
    End Sub

    Quanto clicar no botão ele vai pegar o cell 0 e pegar o Codigo e a cell 2 que é o status para que os mesmo serão gravados na base de dados na sub GravarNoBanco ...

    Agora você deve adaptar ao seu código ai !!!


    Fulvio Cezar Canducci Dias


    segunda-feira, 17 de março de 2014 13:27

Todas as Respostas

  • Olá Daniel,

    poste seu código e informe o que você está querendo fazer.

    Wennder

    segunda-feira, 17 de março de 2014 12:25
  • daniel, bom dia.

    Dentro da itemtemplate coloque o checkbox

    <asp:checkbox id="CheckBox1" runat="server" oncheckedchanged="CheckBox1_CheckedChanged" xmlns:asp="#unknown" />

    No seu aspx.cs

    protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
    {
    CheckBox chk = (CheckBox)sender;
    GridViewRow gr = (GridViewRow)chk.Parent.Parent;
    lblmsg.Text = GridView1.DataKeys[gr.RowIndex].Value.ToString();
     
    //lblmsg.Text = "Hello";
    } 


    Se a resposta foi útil por favor qualifique. Italo Biguzi Duarte, Desenvolvedor ASP.NET C#, Italo.biguzzi@gmail.com

    • Sugerido como Resposta Rafa sibeira segunda-feira, 17 de março de 2014 13:15
    • Marcado como Resposta danielbeneditorosa segunda-feira, 17 de março de 2014 21:53
    segunda-feira, 17 de março de 2014 12:59
  • Bom exemplificando seria mais ou menos assim:

    Tela:

    Quando Clicar no Confirmar por exemplo a rotina seria assim:

    Private Sub BtuConfirmar_Click(sender As Object, e As EventArgs) Handles Button2.Click
    	Dim Codigo As Integer = 0
    	Dim Status As Boolean = False
    	For Each row As DataGridViewRow In DataGridView2.Rows
    		If (Integer.TryParse(row.Cells(0).Value.ToString(), Codigo) AndAlso
    			Boolean.TryParse(row.Cells(2).Value.ToString(), Status)) Then
    			GravarNoBanco(Codigo, Status) 'Sub que grava no banco ...
    		End If
    	Next
    End Sub
    
    Public Sub GravarNoBanco(Codigo As Integer, Status As Boolean)
    	'programe aqui a rotina de gravação ...
    End Sub

    Quanto clicar no botão ele vai pegar o cell 0 e pegar o Codigo e a cell 2 que é o status para que os mesmo serão gravados na base de dados na sub GravarNoBanco ...

    Agora você deve adaptar ao seu código ai !!!


    Fulvio Cezar Canducci Dias


    segunda-feira, 17 de março de 2014 13:27
  • boa noite Fulvio, Obrigado pela resposta, vou te passar a estrutura da tabela:

    CREATE TABLE [dbo].[PermiUser](

          [CODIGO_EMPRESA] [varchar](10) NOT NULL,

          [CODIGO_PERF_USER] [int] NOT NULL,

          [CODIGO_FUNÇÃO_USER] [int] NOT NULL,

          [INSERIR] [bit] NOT NULL,

          [ACTUALIZAR] [bit] NOT NULL,

          [ELIMINAR] [bit] NOT NULL,

          [CONSULTAR] [bit] NOT NULL,

          [IMPRIMIR] [bit] NOT NULL,

     CONSTRAINT [PK_PermiUser] PRIMARY KEY CLUSTERED

    (

          [CODIGO_EMPRESA] ASC,

          [CODIGO_PERF_USER] ASC,

          [CODIGO_FUNÇÃO_USER] ASC

    E abaixo esta o codigo actual do formulario com o datagridview:

    Public Class FrmListaPermissoesUsiarios

        Dim ListaGeralPermissoes As List(Of DAL.LT_PermUsResult)

        Private Sub FrmListaPermissoesUsiarios_Load(sender As Object, e As EventArgs) Handles MyBase.Load

            DGVListaPermissoes.Columns(0).DataPropertyName = "CODIGO_EMPRESA"

            DGVListaPermissoes.Columns(1).DataPropertyName = "CODIGO_PERF_USER"

            DGVListaPermissoes.Columns(2).DataPropertyName = "CODIGO_FUNÇÃO_USER"

            DGVListaPermissoes.Columns(3).DataPropertyName = "INSERIR" 'true ou false

            DGVListaPermissoes.Columns(4).DataPropertyName = "ACTUALIZAR" 'True ou False

            DGVListaPermissoes.Columns(5).DataPropertyName = "ELIMINAR" ' True ou False

            DGVListaPermissoes.Columns(6).DataPropertyName = "CONSULTAR" ' True ou false

            DGVListaPermissoes.Columns(7).DataPropertyName = "IMPRIMIR" 'True ou False

            'aqui usamos uma consulta linque para fazer o preenchimento do datagridview

            Using contexto As New DAL.DANIROSADataContext

                ListaGeralPermissoes = contexto.LT_PermUs.ToList

            End Using

            CarregarGridPermissoes(ListaGeralPermissoes)

        End Sub

       

        'Aqui a rotina que vai fazer o carregamento dos dados no datagridview

        Private Sub CarregarGridPermissoes(Listapermissoes As IList(Of DAL.LT_PermUsResult))

            DGVListaPermissoes.DataSource = Listapermissoes

            DGVListaPermissoes.Update()

        End Sub

        Private Sub DGVListaPermissoes_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DGVListaPermissoes.CellClick

           

            'marcar e desmarcar o check box selecionado

            DGVListaPermissoes.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = _

               Not DGVListaPermissoes.Rows(e.RowIndex).Cells(e.ColumnIndex).Value

        End Sub

        Private Sub BtnConfirmarPermissoes_Click(sender As Object, e As EventArgs) Handles BtnConfirmarPermissoes.Click

            If MessageBox.Show("Tem certeza que deseja actualizar este registro ?", "Actualizar", MessageBoxButtons.YesNo, MessageBoxIcon.Question).Equals(DialogResult.Yes) Then

                Try

                    Dim ctxt As BLL.DANIROSA.PermissoesBLL

                    ctxt = New BLL.DANIROSA.PermissoesBLL

                    Dim pe As New DAL.PermiUser

                    pe.CODIGO_EMPRESA = DGVListaPermissoes.CurrentRow.Cells(0).Value.ToString

                    pe.CODIGO_PERF_USER = DGVListaPermissoes.CurrentRow.Cells(1).Value.ToString

                    pe.CODIGO_FUNÇÃO_USER = DGVListaPermissoes.CurrentRow.Cells(2).Value.ToString

                    pe.INSERIR = DGVListaPermissoes.CurrentRow.Cells(3).Value.ToString

                    pe.ACTUALIZAR = DGVListaPermissoes.CurrentRow.Cells(4).Value.ToString

                    pe.ELIMINAR = DGVListaPermissoes.CurrentRow.Cells(5).Value.ToString

                    pe.CONSULTAR = DGVListaPermissoes.CurrentRow.Cells(6).Value.ToString

                    pe.IMPRIMIR = DGVListaPermissoes.CurrentRow.Cells(7).Value.ToString

                    ctxt.UpdatPermissoes(pe)

                    MessageBox.Show("Registo actualizado com sucesso : ", "Actualizar", MessageBoxButtons.OK, MessageBoxIcon.Information)

                Catch ex As Exception

                    MsgBox(ex.Message, MsgBoxStyle.Exclamation)

                End Try

            End If

        End Sub

    End Class

    Reg. este é o actual codigo do formulario...


    Daniel Rosa Iniciante de programação em vb.net, linq sql e Sql server

    segunda-feira, 17 de março de 2014 21:52
  • Fulvio podes fazer um exemplo de acordo a estrutura da tabela ? são 5 colunas do tipo checkbox

    Obrigado...


    Daniel Rosa Iniciante de programação em vb.net, linq sql e Sql server

    segunda-feira, 17 de março de 2014 22:09