DATAGRIDVIEW

JABA 23/03/2011 18:08:27
#368937
Olá pessoal, tudo bem?

Como criar row dinamicamente e diretamente pelo datagridview?

obs: preciso criar rows sem uitlizar datasets ou datatble, ou seja, diretamente no controle.

Alguem poderia me ajudar?

vlw
JONATHANSTECKER 23/03/2011 18:19:48
#368938
DataGridView1.Rows.Add([Ô]Teste[Ô], [Ô]Teste01[Ô])
JABA 23/03/2011 18:40:23
#368943
ok.

O problema é o seguinte:

eu criei as colunas e os cabeçalhos amarrados para as propriedades do meu obj pelo DataPropertyName do controle DataGridView, sendo assim, quando tento criar uma nova row(nao preenchida) em tempo de execucao, o vb diz que nao posso criar rows em tempo de execucao porque estou usando o controle como databound, como contornar esse problema?

Olha o erro que gera: [Ô]Rows cannot be programmatically added to the DataGridView[ô]s rows collection
when the control is data-bound.[Ô]

obs: as colunas e os cabeçalhos ja existem, pois foram criados manualmente em tempo de design.

vlw
ADHEL 24/03/2011 09:43:20
#368999
Resposta escolhida
Eu fiz um exemplo no vb 2010
JABA 24/03/2011 10:41:24
#369017
Muito bom ADHEL, o teu projeto funciona perfeitamente, só que quando eu preencho o grid inicialmente com dg.DataSource = datatable, acontece a mesmo problema que estou tendo aqui.

Isso tudo só acontece porque estou preenchendo o datagridview inicialmente por uma fonte datatable e utilizando o datasource do grid para popula-lo, a partir daí, quando eu tento adicionar um item na grid, gera o seguinte erro: [Ô]Rows cannot be programmatically added to the DataGridView[ô]s rows collection
when the control is data-bound.[Ô]

De qualquer forma,
Muito Obrigado.
ADHEL 24/03/2011 10:50:00
#369022
Jaba
Porque você tem que adicionar itens nesse mesmo grid?
Dependendo da resposta ,poderemos achar outro caminho.
JABA 24/03/2011 11:06:31
#369024
Digamos que o cara queira adicionar um novo item, com isso, eu nao quero recarregar todo o grid para atualizar somente um item, essa é a minha intencao.

esse é o codigo que estou utilizando para preencher a grid:

Public Shared Function PreencheLista(ByVal Colecao As Object, ByRef Grid As DataGridView) As Boolean
Dim dt As New DataTable
Try
If Colecao IsNot Nothing Then
[ô]Retorna a estrutura das colunas de uma Grid para um datatable
For i As Integer = 0 To Grid.Columns.Count - 1
dt.Columns.Add(Grid.Columns.Item(i).HeaderText)
dt.Columns.Item(i).Caption = Grid.Columns.Item(i).HeaderText
dt.Columns.Item(i).ColumnName = Grid.Columns.Item(i).DataPropertyName
Next
If dt.Columns.Count - 1 > 0 Then
[ô]Preenche um datatable de acordo com as propriedades encontradas na estrutura da grid
For Each Obj As Object In Colecao
Dim dr As DataRow = dt.NewRow
For x As Integer = 0 To dt.Columns.Count - 1
dr(x) = Get_Valor_Propriedade(Obj, dt.Columns.Item(x).ColumnName)
Next
dt.Rows.Add(dr)
Next
End If
[ô]Retorna um datatable com os dados ja inseridos
Grid.DataSource = dt
Return True
Else
Return False
End If
Catch
Throw New Exception([Ô]Ocorreu um erro ao preencher os dados no Grid[Ô])
Finally
dt = Nothing
End Try
End Function
JABA 28/03/2011 11:55:40
#369433
Esse metodo PreencheLista funciona perfeitamente, o problema acontece quando eu quero adicionar um item em tempo de execucao sem precisar recarregar toda a lista.

Alguem ae ja passou por isso?

vlw
ADHEL 28/03/2011 12:43:55
#369441
Olha, li alguns arquivos e não é muito animador.
talvez terá que NOVAMENTE chamar a rotina de exibição dos dados após a nova inserção
JABA 28/03/2011 13:05:54
#369445
putz, mas vc descobriu qual é o motivo?
ADHEL 28/03/2011 13:34:04
#369455
Olha se dá para fazer o que você quer,eu não sei te responder.
mas o mais fácil é carregar o grid novamente.
Coloquei o erro que gera no google.tem um monte do tópico,um ou dois que tentei como solução não deu certo.
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas