NOVA LINHA EM DATAGRID
Como você está preenchendo o DataGridView, não é com o DataSource?
Se for, é só fazer como o exemplo do Kerplunk.
Adiciona o item na List<T>, ou no DataTable, não sei como está usando e aÃ, vincula o DataSource novamente ao DataGridView e pronto.
Se quiser, posta a parte do código em que você preenche o DataGridView que a galera aqui te ajuda.
Abraços;
Se for, é só fazer como o exemplo do Kerplunk.
Adiciona o item na List<T>, ou no DataTable, não sei como está usando e aÃ, vincula o DataSource novamente ao DataGridView e pronto.
Se quiser, posta a parte do código em que você preenche o DataGridView que a galera aqui te ajuda.
Abraços;
Como já falaram tudo depende do que você passou para o DataSource do grid.
Um único detalhe é que apesar de o que o KERPLUNK falou funcionar caso o grid tenha sido preenchido com o List<T> isso não é o ideal, o ideal seria em vez de usar um List<T> usar o BindingList<T>, pois assim apenas de adicionar um novo item no BindingList<T> o grid já vai ser notificado e vai mostrar esse novo registro, sem precisar remover e adicionar o DataSource, que forçaria o grid a recriar todas as linhas.
Outro detalhe importante, se estiver criando objetos para representar os dados o ideal para usar o grid é implementar a interface INotifyPropertyChanged no seu objeto, pois assim se você modificar um valor em qualquer objeto que está no grid por código ele automaticamente exibe as alterações.
Um único detalhe é que apesar de o que o KERPLUNK falou funcionar caso o grid tenha sido preenchido com o List<T> isso não é o ideal, o ideal seria em vez de usar um List<T> usar o BindingList<T>, pois assim apenas de adicionar um novo item no BindingList<T> o grid já vai ser notificado e vai mostrar esse novo registro, sem precisar remover e adicionar o DataSource, que forçaria o grid a recriar todas as linhas.
Outro detalhe importante, se estiver criando objetos para representar os dados o ideal para usar o grid é implementar a interface INotifyPropertyChanged no seu objeto, pois assim se você modificar um valor em qualquer objeto que está no grid por código ele automaticamente exibe as alterações.
Um List<T> pode perfeitamente servir de BindingSource e não necessita ser uma BindingList<T>, inclusive usando BindingNavigator, para servir de controle de adicionar e excluir. Um BindingSource, pode servir de fonte de dados para qualquer componente. Como sei que vão querer ver [Ô]exemplo[Ô], aqui vai um em anexo.
Citação::
Um List<T> pode perfeitamente servir de BindingSource e não necessita ser uma BindingList<T>, inclusive usando BindingNavigator, para servir de controle de adicionar e excluir. Um BindingSource, pode servir de fonte de dados para qualquer componente. Como sei que vão querer ver [Ô]exemplo[Ô], aqui vai um em anexo.
Sim funciona, mas não é ideal, pois o List<T> não implementa a interface IBindingList, o que faz com que um DataGridView não seja notificado caso um item seja adicionado ou removido deste List<T>
Criei um exemplo simples para mostrar a diferença, é basicamente uma tela com um DataGridView e alguns campos para adicionar dados direto no objeto que foi usado como DataSource deste grid, uma usando List<T> e outra usando BindingList<T>, o código é idêntico nos dois mudando apenas qual tipo de lista usei.
No List<T> quando adiciono um novo objeto nele nada muda no DataGridView, já com o BindingList<T> no momento que adiciono o novo item ele é automaticamente exibido no DataGridView.
Estamos em sintonia. No exemplo que passei, uso List<T> EM um BindingSource e o comportamento é o mesmo. Adicionando um Ãtem no BindingSource, é adicionado tanto no List<T> quanto no Grid ou qualquer objeto que esteja ligado ao BindingSource.
Em anexo, mais um pequeno programinha mostrando possibilidades para um grid. Features:
- OminSearch: procura qualquer valor em qualquer propriedade de qualquer Ãtem da lista e os exibe no grid em tempo real
- Exibindo dados do Ãtem atual em uma PropertyGrid
- Buscando tÃtulos e tooltip das colunas com Reflection
- Dados controlados por um BindingSource
- Anexando controles diferenciados como valores de célula, no caso, células do tipo Data, são alteradas usando um controle DateTimePicker
- Adição e exclusão de Ãtens com um controle BindingNavigator
- Mostrando o uso de decorações para personalizar o PropertyGrid, como Descrição da propriedade e agrupamento no PropertyGrid
Tudo isso, com algo em torno de 20 linhas de código apenas, desde que, se use OOP e suas versatilidades.
- OminSearch: procura qualquer valor em qualquer propriedade de qualquer Ãtem da lista e os exibe no grid em tempo real
- Exibindo dados do Ãtem atual em uma PropertyGrid
- Buscando tÃtulos e tooltip das colunas com Reflection
- Dados controlados por um BindingSource
- Anexando controles diferenciados como valores de célula, no caso, células do tipo Data, são alteradas usando um controle DateTimePicker
- Adição e exclusão de Ãtens com um controle BindingNavigator
- Mostrando o uso de decorações para personalizar o PropertyGrid, como Descrição da propriedade e agrupamento no PropertyGrid
Tudo isso, com algo em torno de 20 linhas de código apenas, desde que, se use OOP e suas versatilidades.
é assim que eu preencho o grid
Dim conn As New MySqlConnection
Dim myCommand As New MySqlCommand
Dim myAdapter As New MySqlDataAdapter
Dim myData As New DataTable
Dim SQL As String
conn = New MySqlConnection
conn.ConnectionString = [Ô]server=localhost;user id=root;password=123456;database=test[Ô]
SQL = [Ô] SELECT C_C FROM TABELA;[Ô]
Try
conn.Open()
Try
myCommand.Connection = conn
myCommand.CommandText = SQL
myAdapter.SelectCommand = myCommand
myAdapter.Fill(myData)
DataGridView1.DataSource = myData
conn.Close()
Catch myerro As MySqlException
MsgBox([Ô]Test Connection: ERROR[Ô] & myeror.Message)
End Try
Catch myerro As MySqlException
MsgBox([Ô]Erro; [Ô] & myerro.Message)
Finally
conn.Close()
End Try
CONSEGUI DESTA FORMA;
No código acima, o MyData, coloquei ele como uma variável global,
Adicione uma nova linha, mesmo a carregando direto do banco
Font: https://msdn.microsoft.com/pt-br/library/system.data.datatable.newrow(v=vs.110).aspx
No código acima, o MyData, coloquei ele como uma variável global,
dataTableG01LE
Dim row As DataRow
Dim view As DataView
[ô], , , , , , , , ,
[ô], , ,
row = dataTableG01LE.NewRow()
row([Ô]colum1[Ô]) = Id.text
row([Ô]colum2[Ô]) = Nome.text
row([Ô]colum3[Ô]) = site.text
row([Ô]colum4[Ô]) = e-mail.text
dataTableG01LE.Rows.Add(row)
view = New DataView(dataTableG01LE)
Grid2.DataSource = view
Adicione uma nova linha, mesmo a carregando direto do banco
Font: https://msdn.microsoft.com/pt-br/library/system.data.datatable.newrow(v=vs.110).aspx
Você está fazendo exatamente como eu havia dito.
Siiim
Tópico encerrado , respostas não são mais permitidas