Jump to content
Sign in to follow this  
SLIFE

Alimentar DataTable

Recommended Posts

SLIFE

Boas

Como poderei alimentar uma data table atraves de uma datagridviewer?

Será possivel??

Tenho um codigo que carrega duas datagridviewers, e precisava de alimentar duas datatables para poder efectuar a comparacao do conteudo das duas!

Será possivel?

Em vez de datagridviewer1.datasource= DT, é possivel inverter?

Tipo dt=datagridviewer1.datasource

Será que funciona? E será que fica na table os dados da datagried?

Cpts

SJC


Sandro Coelho

Share this post


Link to post
Share on other sites
Caça

Se a datagrid for preenchida através de um DataSource, sim.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
SLIFE

Boas

tenho este codigo, mas esta a esoirar na parte do verificar e juntar o conteudo dos datagrids.

Alguem me consegue dar uma ideia de o porque!

A primeira datagrid e carregada atraves de um ficheiro excel.

A segunda datagrid é carregada atraves de um fcheiro CVS.

Imports System.IO
Imports System.Data.OleDb
Imports System.Collections.ObjectModel
Imports System.Data.Odbc
Public Class FrmIngredientes
    Private cn As OleDbConnection = New OleDbConnection
    Private cm As OleDbCommand = New OleDbCommand
    Private rd As OleDbDataReader
    Private adp As OleDbDataAdapter
    Private da As OleDbDataAdapter
    Dim DT1 As New DataTable
    Dim DT2 As New DataTable
    Dim DT3 As New DataTable
    Dim row As DataRow
    Dim row1 As DataRow
   



    Private Sub BtnCaminhoXls_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCaminhoXls.Click
        'define os valores padrão para o componente OpenFileDialog

        OFDFicheiro.Filter = "Excel (*.xls)|*.XLS"
        OFDFicheiro.FilterIndex = 2
        OFDFicheiro.FileName = ""
        'OFDFicheiro.InitialDirectory = My.Application.Info.DirectoryPath
        OFDFicheiro.RestoreDirectory = True

        If OFDFicheiro.ShowDialog = Windows.Forms.DialogResult.OK Then

            TxtCaminhoficheiroXLS.Text = OFDFicheiro.FileName


            If TxtCaminhoficheiroXLS.Text = String.Empty Then
                MsgBox("Não efectuou a localização do ficheiro de Excel", MsgBoxStyle.Critical, "ConVerTer")
            Else
                ' WriteINI("Localizacao", "Ficheiro PLUs", TxtCaminhoficheiro.Text, My.Application.Info.DirectoryPath & "\ConVerTer.ini")
                ' MsgBox("ERRO")
            End If
        End If
    End Sub

    Private Sub BtnCaminhoCVS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCaminhoCVS.Click
        'define os valores padrão para o componente OpenFileDialog

        OFDFicheiro.Filter = "Texto (*.txt)|*.TXT"
        OFDFicheiro.FilterIndex = 2
        OFDFicheiro.FileName = ""
        'OFDFicheiro.InitialDirectory = My.Application.Info.DirectoryPath
        OFDFicheiro.RestoreDirectory = True

        If OFDFicheiro.ShowDialog = Windows.Forms.DialogResult.OK Then

            TxtFicheiroCaminhoCVS.Text = OFDFicheiro.FileName


            If TxtFicheiroCaminhoCVS.Text = String.Empty Then
                MsgBox("Não efectuou a localização do ficheiro de Excel", MsgBoxStyle.Critical, "ConVerTer")
            Else
                ' WriteINI("Localizacao", "Ficheiro PLUs", TxtCaminhoficheiro.Text, My.Application.Info.DirectoryPath & "\ConVerTer.ini")
                ' MsgBox("ERRO")
            End If
        End If
    End Sub

  




    Private Sub BtnCarregaXLS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCarregaXLS.Click
        If TxtCaminhoficheiroXLS.Text = String.Empty Then
            MsgBox("necessita primeiro de escolher o ficheiro execel a importar")
        Else
            Try

                Dim conexao_Excel As String = "Provider=Microsoft.Jet.OleDb.4.0;data source=" & TxtCaminhoficheiroXLS.Text & ";" & "Extended Properties=Excel 8.0;"


                'BLC
                da = New OleDbDataAdapter("SELECT * FROM [Folha1$]", conexao_Excel)


                ' preenche a tabela com dados da planilha Excel
                ' DT1 = New DataTable
                da.Fill(DT1)

                row = DT1.NewRow
                DT1.Rows.Add(row)

                ' define a chave primaria

                DT1.PrimaryKey = New DataColumn() {DT1.Columns(TxtIndex.Text)}





                ' registor somente podem ser inseridos usando esta tecnica
                DT1.DefaultView.AllowDelete = False
                DT1.DefaultView.AllowEdit = False
                DT1.DefaultView.AllowNew = False
                DataGridView1.RowHeadersVisible = False
                DataGridView1.AllowUserToAddRows = False


                ' vincula o modo de visao padrão da tabela ao datagrid
                DataGridView1.DataSource = DT1
                DataGridView1.Refresh()


            Catch ex As Exception
                MsgBox(ex.Message, "Converter BLC para 3BC")
            End Try
        End If
    End Sub

    Private Sub BtnFechar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnFechar.Click
        FrmActualizaPVP.Show()
        Me.Close()

    End Sub

    Private Sub BTNCarregaCVS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNCarregaCVS.Click
       


        'define as variáveis usadas no projeto
        Dim linhaTexto As String = ""
        Dim arrrayDeLinhas() As String
        Dim nomeArquivo As String = ""

      

        'atribui o nome e caminho do arquivo a caixa de texto
        nomeArquivo = TxtFicheiroCaminhoCVS.Text




        DataGridView2.ColumnHeadersVisible = True

        'define a estrutura da DataTable que vai receber os dados

        DT2.Columns.Add("NUMING", Type.GetType("System.String"))
        DT2.Columns.Add("DESCRICAOING", Type.GetType("System.String"))
       








        'verifica se o arquivo existe
        If File.Exists(nomeArquivo) = True Then
            'cria um novo objeto StreamReader
            Dim objReader As New StreamReader(nomeArquivo, System.Text.Encoding.Default)
            'percorre o arquivo
            Do While objReader.Peek() <> -1
                linhaTexto = objReader.ReadLine()
                arrrayDeLinhas = Split(linhaTexto, "|")
                row = DT2.NewRow
                row.ItemArray = arrrayDeLinhas
                DT2.Rows.Add(row)
            Loop
            'atribui ao datagridview o objeto datatable criado
            DataGridView2.DataSource = DT2
            objReader.Close()
          


        Else
            MsgBox("O arquivo não foi encontrado...")
        End If
    End Sub

    Private Sub BtnJuntarTabelas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnJuntarTabelas.Click
       
        DT1 = DataGridView1.DataSource
        DT2 = DataGridView2.DataSource

      


        DT3.Columns.Add("EAN") 'Adiciona uma coluna "EAN" ao datatable DT3
        DT3.Columns.Add("DESCRICAOING") 'Adiciona uma coluna "DESCRICAOING" ao datatable DT3

        For Each DR As DataRow In DT1.Rows  'para cada linha no datatable1 (começa a percorrer o datatable1)
            For Each DR2 As DataRow In DT2.Rows 'para cada linha no datatable2 (começa a percorrer o datatable2)
                If Integer.Parse(DR("TABING")) = Integer.Parse(DR2("NUMING")) Then 'compara o campo "TABING" do datatable1 com o o campo "NumeroIngredientes" do datatable2
                    DT3.Rows.Add(DR("EAN13").ToString, DR2("DESCRICAOING").ToString) 'caso sejam iguais acrescenta as as linhas com os correspondentes com os valores "EAN" e "DESCRICAOING" ao datatable3
                    Exit For
                End If
            Next
        Next


        DataGridView3.DataSource = DT3

    End Sub

    Private Sub BtnExportar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnExportar.Click
        'EXTRAIR INFORMACÃO PARA EXCEL
        Try
            'Label3.Visible = True
            'Label3.Text = "AGUARDE POR FAVOR, O PROGRAMA ENCONTRA-SE A GERAR O MAPA DE EXCEL"

            Dim objApp As Object
            objApp = CreateObject("Excel.Application")
            Dim objBook As Microsoft.Office.Interop.Excel.Workbook

            Dim i As Integer = 0
            Dim j As Integer = 0
            Dim oldCI As System.Globalization.CultureInfo = _
              System.Threading.Thread.CurrentThread.CurrentCulture
            System.Threading.Thread.CurrentThread.CurrentCulture = _
                New System.Globalization.CultureInfo("pt-PT")

            objBook = objApp.Workbooks.Add

            objBook.Sheets(1).Select()



            objApp.ActiveSheet.Cells(1, 0 + 1) = "ITM8"
            objApp.ActiveSheet.Cells(1, 0 + 1).Font.Bold = True

            objApp.ActiveSheet.Cells(1, 0 + 1) = "EAN13"
            objApp.ActiveSheet.Cells(1, 0 + 1).Font.Bold = True

          


            objApp.Columns.AutoFit()
            For i = 0 To DataGridView3.Rows.Count - 1       'Numero de Linhas para extrair informação
                objApp.Columns.AutoFit()
                For j = 0 To DataGridView3.Columns.Count - 1 'Numero de Colunas Com os Nomes para a BD
                    objBook.Application.Cells(i + 2, j + 1).font.name = "Times New Roman"
                    objBook.Application.Cells(i + 2, j + 1).font.size = 9
                    objBook.Application.Cells(i + 2, j + 1).value = DataGridView3.Rows(i).Cells(j).Value
                Next
            Next

            'Nex
            objApp.Visible = True
            objApp = Nothing
            objBook = Nothing
            Beep()
            Label3.Text = "MAPA GERADO COM SUCESSO"
        Catch
            MsgBox("O EXCEL não pode ser iniciado!", vbCritical)
            Label3.Text = "OCORREU UM ERRO"
        End Try
    End Sub
End Class

O programa estoira aqui:

If Integer.Parse(DR("TABING")) = Integer.Parse(DR2("NUMING"))

dando o erro de: A conversão do tipo 'DBNull' para o tipo 'String' não é válida.

Imagem de exemplo do programa:

http://www.box.net/shared/71ptgq43af

Se alguem me poder ajudar agradecia, para perceber o que estou a fazer de mal.

Cpts

SJC


Sandro Coelho

Share this post


Link to post
Share on other sites
Caça

É porque uma dessas colunas está a null, tens de dar o tratamento necessário.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
SLIFE

É porque uma dessas colunas está a null, tens de dar o tratamento necessário.

Boas Caça

Eu se fizer pelo debug ele passa uma data de linhas a comparar, mas depois sem motivo aparente estoira.

Estive a ver e nao existe nenhuma linha sem dados inserida.

Apenas a ultima da datagrid é que aparece em branco.

Como se fosse para inserir um novo registo.

Já tentei remove-la mas sem sucesso.

Ja coloquei o allowuseraddnew a false, mas mesmo assim ela continua a aparecer.

Será por essa linha la estar em branco que o programa estoira?

Como posso remover isso?

Experimentas-te o meu codigo? deu-te algum erro?

Se quiseres coloco os ficheiros que sao carregados no datagrid para que possas experimentar.

Ficava agradecido.

Cpts

SJC


Sandro Coelho

Share this post


Link to post
Share on other sites
Caça

Faz o tratamento

If Integer.TryParse(DR("TABING").ToString, 0) = False Then Exit For


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
SLIFE

Faz o tratamento

If Integer.TryParse(DR("TABING").ToString, 0) = False Then Exit For

Funciona.

nao acredito que por uma simples linha de codigo ando a bater com a cabeça nas paredes!

Obrigado Caça

Cpts

SJC


Sandro Coelho

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
Sign in to follow this  

×
×
  • Create New...

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.