NOVA LINHA EM DATAGRID
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.
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?
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.
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.
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.
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.
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.
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 ?
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.
ACCIOLLY, sim, irei salvar em um banco depois