POPULAR COMBOBOX DE DATAGRIDVIEW
Prezados,
Boa tarde!
Eu sei que é um infortúnio mandar pergunta no final da aula (estamos extremamente próximos ao Natal!), mas realmente é uma dúvida que está me incomodando...
Já tentei por diversas maneiras popular um combobox num datagridview, mas o .NET não está colaborando.
Quero uma função que me traga um DGV populado. Até aqui, ok, realizo vários, sem problemas... é que neste caso, quero colocar um Combobox (até aqui, também sem problemas), mas no momento que tento preeche-lo, o runtime me retorna um erro.
O problema está aqui:
Crio uma variável estilo ComboBox para célula e vou preenchendo informações nela...
Dim combo As New DataGridViewComboBoxCell
For Each registro2 As DataRow In ds.Tables([Ô]GRUPOS[Ô]).Rows
combo.Items.Add(registro2([Ô]TELEFONE[Ô]))
Next
Porem quando tento adiciona-la à linha, o sistema me apresenta erro.
[ô]POPULO A LINHA COM AS INFORMAÇÕES DA AUTORIZAÇÃO + O COMBOBOX
DGV.Rows.Add(registro([Ô]COLUNA1[Ô]),[...] combo)
Desde já, muito obrigado e boas festas à todos!!!
Boa tarde!
Eu sei que é um infortúnio mandar pergunta no final da aula (estamos extremamente próximos ao Natal!), mas realmente é uma dúvida que está me incomodando...
Já tentei por diversas maneiras popular um combobox num datagridview, mas o .NET não está colaborando.
Quero uma função que me traga um DGV populado. Até aqui, ok, realizo vários, sem problemas... é que neste caso, quero colocar um Combobox (até aqui, também sem problemas), mas no momento que tento preeche-lo, o runtime me retorna um erro.
Public Shared Function DGV_Autorizacoes(DGV As DataGridView) As DataGridView
Try
DGV.Columns.Clear()
[ô]AQUI PREPARO A FORMATAÇÃO DO DGV
With DGV
.DefaultCellStyle.Font = New Font([Ô]Consolas[Ô], 12)
[ô].ReadOnly = True
.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
.AllowUserToAddRows = False
.AlternatingRowsDefaultCellStyle.BackColor = Color.Bisque
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.AllowUserToResizeColumns = False
.RowHeadersVisible = False
.AllowUserToResizeRows = False [ô]não permite redimensionar a linha
.MultiSelect = False [ô]selecionar várias linhas = falso
.ColumnCount = 6
.Columns(0).Name = [Ô]Código[Ô]
.Columns(1).Name = [Ô]Nome[Ô]
.Columns(2).Name = [Ô]Documento[Ô]
.Columns(3).Name = [Ô]CPF[Ô]
.Columns(4).Name = [Ô]Parentesco[Ô]
.Columns(5).Name = [Ô]ID_TELEFONE[Ô]
.Columns(0).Visible = False
.Columns(1).AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill
.Columns(2).Width = 100
.Columns(3).Width = 200
.Columns(4).Width = 300
.Columns(5).Visible = False
End With
[ô]INSIRO A COLUNA DE COMBOBOX
Dim column As New DataGridViewComboBoxColumn()
With column
.HeaderText = [Ô]Telefone(s)[Ô]
.Name = [Ô]telefone[Ô]
.Width = 150
.FlatStyle = FlatStyle.Standard
.SortMode = DataGridViewColumnSortMode.Automatic
.CellTemplate = New DataGridViewComboBoxCell()
End With
DGV.Columns.Insert(6, column)
For Each columns As DataGridViewColumn In DGV.Columns
DGV.Columns(columns.Index).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
Next
_query = [Ô]select * from AUTORIZACOES[Ô]
Dim comm2 As OleDbCommand = New OleDbCommand(_query, _cn)
Dim da2 As OleDbDataAdapter = New OleDbDataAdapter(comm2)
Dim ds2 As DataSet = New DataSet()
da2.Fill(ds2, [Ô]AUTORIZACOES[Ô])
Dim _AUTS() As DataRow = ds2.Tables([Ô]AUTORIZACOES[Ô]).Select
For Each registro As DataRow In ds2.Tables([Ô]AUTORIZACOES[Ô]).Rows
[ô]FAÇO A PESQUISA NO BD REFERENTE À UM ID
_query = [Ô]select * from TELEFONES where ID = @id[Ô]
Dim comm As OleDbCommand = New OleDbCommand(_query, _cn)
comm.Parameters.AddWithValue([Ô]@id[Ô],_registro([Ô]ID[Ô]))
Dim da As OleDbDataAdapter = New OleDbDataAdapter(comm)
Dim ds As DataSet = New DataSet()
da.Fill(ds, [Ô]TELEFONES[Ô])
Dim _TELS() As DataRow = ds.Tables([Ô]TELEFONES[Ô]).Select
[ô]CRIO UMA COMBOBOX DE DGV PARA ARMAZENAR OS VALORES
Dim combo As New DataGridViewComboBoxCell
For Each registro2 As DataRow In ds.Tables([Ô]GRUPOS[Ô]).Rows
combo.Items.Add(registro2([Ô]TELEFONE[Ô]))
Next
[ô]POPULO A LINHA COM AS INFORMAÇÕES DA AUTORIZAÇÃO + O COMBOBOX
DGV.Rows.Add(registro([Ô]COLUNA1[Ô]), registro([Ô]COLUNA2[Ô]), registro([Ô]COLUNA3[Ô]), registro([Ô]COLUNA4[Ô]), registro([Ô]COLUNA5[Ô]), registro([Ô]COLUNA6[Ô]), combo)
Next
Return DGV
Catch ex As Exception
MessageBox.Show(ex.Message, [Ô]Alerta de Erro[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
Return Nothing
Finally
If _cn.State = ConnectionState.Open Then _cn.Close()
End Try
End Function
End Class
O problema está aqui:
Crio uma variável estilo ComboBox para célula e vou preenchendo informações nela...
Dim combo As New DataGridViewComboBoxCell
For Each registro2 As DataRow In ds.Tables([Ô]GRUPOS[Ô]).Rows
combo.Items.Add(registro2([Ô]TELEFONE[Ô]))
Next
Porem quando tento adiciona-la à linha, o sistema me apresenta erro.
[ô]POPULO A LINHA COM AS INFORMAÇÕES DA AUTORIZAÇÃO + O COMBOBOX
DGV.Rows.Add(registro([Ô]COLUNA1[Ô]),[...] combo)
Desde já, muito obrigado e boas festas à todos!!!
Ve se te ajuda, o codigo esta em C#.net mais não deve ser tão diferente assim.
//Creio que o seu problema e no momento de Setar o Combo do Grid
//Se você ver utilizo o proprio campo do grid na declaração para ficar de tipo igual
DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)dgvEtiqSelecao.Rows[linha].Cells[5];
//Creio que o seu problema e no momento de Setar o Combo do Grid
//Se você ver utilizo o proprio campo do grid na declaração para ficar de tipo igual
DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)dgvEtiqSelecao.Rows[linha].Cells[5];
Olá Madmax!
Primeiramente muito obrigado pela resposta e aproveito para lhe desejar um bom 2014!
Bem, fiz o que vc me instruiu, porem o problema persiste... fiz de duas maneiras...
Veja o exemplo prático que testei abaixo para ficar mais simples:
1) Alimentei a variável de DGVcombobox:
VB
C#
2) Criei a linha do DGV:
3) Fiz o DirectCast sugerido por você de duas maneiras:
#Método1
VB
C#
#Método2
VB
C#
Porem os dois métodos continuam aparecendo a mensagem de erro - print postado acima.
Fiz algo errado?
Grato.
Primeiramente muito obrigado pela resposta e aproveito para lhe desejar um bom 2014!
Bem, fiz o que vc me instruiu, porem o problema persiste... fiz de duas maneiras...
Veja o exemplo prático que testei abaixo para ficar mais simples:
1) Alimentei a variável de DGVcombobox:
VB
Dim combo As New DataGridViewComboBoxCell
combo.Items.Add([Ô]1[Ô])
combo.Items.Add([Ô]2[Ô])
combo.Items.Add([Ô]3[Ô])
C#
DataGridViewComboBoxCell combo = new DataGridViewComboBoxCell();
combo.Items.Add([Ô]1[Ô]);
combo.Items.Add([Ô]2[Ô]);
combo.Items.Add([Ô]3[Ô]);
2) Criei a linha do DGV:
DGV.Rows.Add(0,1,2,combo)
3) Fiz o DirectCast sugerido por você de duas maneiras:
#Método1
VB
Dim cell As DataGridViewComboBoxCell = DirectCast(DGV.Rows(0).Cells(6), DataGridViewComboBoxCell)
DGV.Rows(0).Cells(3) = cell [ô]ou
DGV.Rows(0).Cells(3).Value = cell
C#
Dim cell As DataGridViewComboBoxCell = DirectCast(DGV.Rows(0).Cells(6), DataGridViewComboBoxCell)
DGV.Rows(0).Cells(3) = cell;
//ou
DGV.Rows(0).Cells(3).Value = cell;
#Método2
VB
DGV.Rows(0).Cells(3) = DirectCast(DGV.Rows(0).Cells(3), DataGridViewComboBoxCell)
C#
DGV.Rows(0).Cells(3) == (DataGridViewComboBoxCell)DGV.Rows(0).Cells(3)
Porem os dois métodos continuam aparecendo a mensagem de erro - print postado acima.
Fiz algo errado?
Grato.
Ah, para esclarecer a estrutura do DataGridView, mostro abaixo a configuração do mesmo:
VB
C#
VB
With DGV
.ColumnCount = 3
.Columns(0).Name = [Ô]Col 1[Ô]
.Columns(1).Name = [Ô]Col 2[Ô]
.Columns(2).Name = [Ô]Col 3[Ô]
End With
Dim column As New DataGridViewComboBoxColumn()
With column
.HeaderText = [Ô]Col CombBox[Ô]
.Name = [Ô]colcombo[Ô]
.FlatStyle = FlatStyle.Standard
.SortMode = DataGridViewColumnSortMode.Automatic
.CellTemplate = New DataGridViewComboBoxCell()
End With
DGV.Columns.Insert(3, column)
C#
var _with1 = DGV;
_with1.ColumnCount = 3;
_with1.Columns(0).Name = [Ô]Col 1[Ô];
_with1.Columns(1).Name = [Ô]Col 2[Ô];
_with1.Columns(2).Name = [Ô]Col 3[Ô];
DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();
var _with2 = column;
_with2.HeaderText = [Ô]Col CombBox[Ô];
_with2.Name = [Ô]colcombo[Ô];
_with2.FlatStyle = FlatStyle.Standard;
_with2.SortMode = DataGridViewColumnSortMode.Automatic;
_with2.CellTemplate = new DataGridViewComboBoxCell();
DGV.Columns.Insert(3, column);
Olá, eu sei que é um pouco básico, mas colocou no inicio de tudo : Option Strict On
Não é de muita ajuda, mas por vezes soluciona alguns erros.
Não é de muita ajuda, mas por vezes soluciona alguns erros.
Olá ProgramagadorVB6...
Boa tarde.
Na verdade estava desativado.
Subi para ON, fiz as conversões manualmente, mas o erro persiste.
Obrigado.
Boa tarde.
Na verdade estava desativado.
Subi para ON, fiz as conversões manualmente, mas o erro persiste.
Obrigado.
Pessoal,
Para tentar facilitar, criei um projetinho simples com está situação, ocasionando o problema que relato.
Grato.
Para tentar facilitar, criei um projetinho simples com está situação, ocasionando o problema que relato.
Grato.
GGERMINIANI vou tentar te ajudar porem aqui so tenho o Visual Studio 2005 e 2008 , chegando em casa vou ver se consigo abrir
Ok Madmax.
Obrigado.
Realmente estou tentando por diversas formas, mas não estou achando a solução deste erro.
Grato.
Obrigado.
Realmente estou tentando por diversas formas, mas não estou achando a solução deste erro.
Grato.
Faça seu login para responder