NOVA LINHA EM DATAGRID

VARUS 11/05/2016 14:58:04
#461997
Como adiciono uma nova linha no Datagrid depois de carrega-la com dados de um banco de dados?

Tentei desta forma:

 Dim row As String() = New String() {[Ô]0[Ô], [Ô]Carros[Ô], [ô]2.2[ô]}
Grid2.Rows.Add(row)


E me apareceu o seguinte erro:

Citação:

Não é possível adicionar linhas programaticamente à coleção de linhas de DataGridView quando o controle é associado a dados.

JABA 11/05/2016 15:27:52
#461998
Resposta escolhida
Se a grid já estiver com DataSource setado não há como adicionar dados. Uma saída seria você criar um DataTable e setar para a sua DataGridView.
ACCIOLLY 11/05/2016 17:49:26
#462004
Citação:

:
Se a grid já estiver com DataSource setado não há como adicionar dados. Uma saída seria você criar um DataTable e setar para a sua DataGridView.



Mas o DataTable em sí não é um DataSource?
Mais uma pergunta só por curiosidade, você quer inserir apenas as linhas na grid pra poder gravar no banco depois que terminar de inserir?
JABA 11/05/2016 18:44:47
#462006
Citação:

Mas o DataTable em sí não é um DataSource?



Bom, se formos somente pelo sentido da palavra, um DataTable não deixaria de ser um, só que de forma independente. Porém, eu estava me referindo a propriedade DataSource do DataGrid. Se ela já estiver setada, os dados ficarão amarrados(DataBind) e o DataGrid não permitirá adicionar dados manualmente através do Grid2.Rows.Add(row). Se quiser fazer isso, terá que criar um DataTable, preenche-lo com os dados necessários e vinculá-lo novamente ao DataGrid.
NILSONTRES 11/05/2016 19:04:43
#462007
Mais do Mesmo, repito e sei que alguns não concordam, mas carregar controles vinculado a dados é uma fria, quando se trata de datagrid então, nem se fala.
Um controle utilizado para tantas coisas não pode ficar limitado, a não ser que vc esteja ciente que não precisara mexer em nada nele.
KERPLUNK 11/05/2016 19:25:57
#462010
NILSONTRES, muito pelo contrário. Carregar um datagrid com fonte de dados é o mais dinâmico que se pode ser. Da mesma maneira que eu passo dados para a propriedade DataSource, eu posso buscar novamente:
Passando os dados:

List<Clientes> dados = new Clientes().BuscarTudo();
dgvClientes.DataSource = dados;


Buscando os dados de volta:

List<Clientes> dadosGrid = (List<Clientes>)dgvClientes.DataSource
dadosGrid.Add(new Cliente() { id = 1, Nome = [Ô]Fulano de tal[Ô]});
//e pode até repassar os dados para o grid, limpando antes:

dgvClientes.DataSource = null;
dgvClientes.DataSource = dadosGrid;
//a linha acima, preenche o datagridview, com todos os ítens que já estavam nele antes, da forma que estavam e com um cliente novo adicionado.


Para adicionar um novo é o mesmo que acima, sendo que o novo ítem, pode estar totalmente em branco, sem preencher nenhuma propriedade, deixando isso à cargo do usuário que preenche conforme ele quiser. Cada célula já estará tipada com o tipo de sua propriedade correspondente. Incluindo células com simples checkbox que correspondem à propriedades do tipo boolean.

Existe um evento que é ativado ao se deixar uma linha e partir para uma nova e nele, você pode ativar a gravação do objeto se este contar com um método específico:

Clientes atual = (Clientes)dgvClientes.CurrentRow.DataBoundItem;
atual.Gravar();


O grande [Ô]clique[Ô], é não enxergar um datagridview como uma planilha do excel. Ele é uma representação de uma lista de objetos com uma mesma estrutura. Cada objeto, pode ser buscado individualmente, seja pelo índice da linha ou uma propriedade que sirva como chave, sempre usando a lista de objetos que é a fonte de dados, ou seja, o DataSource. Aquela coisa de for...next para ficar buscando linha por linha, célula por célula, é tão arcaico e trabalhoso que nem ao menos faz sentido. Esse tipo de tarefa é a máquina quem faz. Nós, programadores, fazemos uso do que faz sentido, dados, objetos estruturados e não número de linhas, colunas, células. A OOP está aí para isso, para facilitar a vida e quanto mais você entende ela, mais fácil fica a sua vida para trabalhar.
NILSONTRES 12/05/2016 00:55:30
#462020
Citação:

NILSONTRES, muito pelo contrário. Carregar um datagrid com fonte de dados é o mais dinâmico que se pode ser. Da mesma maneira que eu passo dados para a propriedade DataSource, eu posso buscar novamente:


Mas você não consegue utilizar para outras coisas, como adicionar linhas e outras mais. e Não vejo vantagem nenhuma em carregar via datasource ou acrescentando linhas.
KERPLUNK 12/05/2016 01:11:37
#462021
Citação:

:
NILSONTRES, muito pelo contrário. Carregar um datagrid com fonte de dados é o mais dinâmico que se pode ser. Da mesma maneira que eu passo dados para a propriedade DataSource, eu posso buscar novamente:
Mas você não consegue utilizar para outras coisas, como adicionar linhas e outras mais. e Não vejo vantagem nenhuma em carregar via datasource ou acrescentando linhas.



Claro que consegue! Como mostrei, você adiciona novas linhas no DataSource e recoloca o DataSource no grid.
NILSONTRES 12/05/2016 06:46:02
#462023
Citação:

Claro que consegue! Como mostrei, você adiciona novas linhas no DataSource e recoloca o DataSource no grid.


ok, mas sem recarregar o list, é possível ?
Como fica a cabeça das colunas ? Como dar o nome a elas sem ser o nome do campo carregado, é possível.
As combos deixei de utilizar e utilizo um truque de fonte para simular uma combo, que deixa muito mais ágil e pratico o clique, porque comecei no visual 2008 e era meio bugado as combos do grid, não utilizei mais, sera que nas versões atuais melhorou ?
KERPLUNK 13/05/2016 00:50:29
#462044
Citação:

:
ok, mas sem recarregar o list, é possível ?
Como fica a cabeça das colunas ? Como dar o nome a elas sem ser o nome do campo carregado, é possível.
As combos deixei de utilizar e utilizo um truque de fonte para simular uma combo, que deixa muito mais ágil e pratico o clique, porque comecei no visual 2008 e era meio bugado as combos do grid, não utilizei mais, sera que nas versões atuais melhorou ?


Os títulos de coluna, podem ser definidos pela decoração [Ô]DisplayName[Ô], que é colocada em cada propriedade. Alguns tipos de dados, já assumem o tipo correto de coluna, como dados boolean e string. Mas você pode customizar completamente o preenchimento do grid usando os tipos apropriados de colunas e células, incluindo com controles não disponíveis por padrão(como um DatePicker por exemplo) Como sei que ler isso é uma coisa e ver pronto é outra, fiz um exemplo para quem quiser entender como isso tudo funciona e está em anexo.
VARUS 16/05/2016 15:33:56
#462135
Desculpa galera, mas ainda n entendi como fazer,


ACCIOLLY, sim, irei salvar em um banco depois
Página 1 de 3 [22 registro(s)]
Tópico encerrado , respostas não são mais permitidas