Array
(
)

Problemas com combobox e List<>

Leandro Moura
   - 03 jul 2012

Bom dia,
Estou com o seguinte problema:
Tenho uma classe Cursos com um List:
public List<Cursos> Localizar()
{
List<Cursos> lstCurso = new List<Cursos>();
using(SqlConnection objConexao=new SqlConnection(objDados.strConn))
{
using(SqlCommand objCommand =new SqlCommand(Dados.strSelectCurso,objConexao))
{
objConexao.Open();
SqlDataReader objDataReader = objCommand.ExecuteReader();
if (objDataReader.HasRows)
{
while (objDataReader.Read())
{
Cursos objCurso = new Cursos();
objCurso.IdCurso = Convert.ToInt32(objDataReader[IdCurso].ToString());
objCurso.Curso=objDataReader[Curso].ToString();
lstCurso.Add(objCurso);
}
objDataReader.Close();
}
objConexao.Close();
}
}
return lstCurso;
}
no meu formulário carrego um combobox com os items desse List
estou fazendo assim:
private void CarregaCurso()
{
DadosCursos objCurso = new DadosCursos();
List<DadosCursos.Cursos> listaCurso = new List<DadosCursos.Cursos>();
listaCurso = objCurso.Localizar();

foreach (var itemLista in listaCurso)
{
cboCurso.ValueMember = itemLista.IdCurso.ToString();
cboCurso.DisplayMember = itemLista.Curso;
cboCurso.Items.Add(itemLista.Curso);
}
}
Até ai tudo bem carrega os items
Ao Selecionar um item quero que o IdCurso seja correspondente ao Curso selecionado
pois da forma que está só está gravando o terceiro item do combobox.
Ah! Adicionei um item ao Index 0: Selecione um curso que é exibido quando carrego o form
Já tentei fazer o seguinte:
private void cboCurso_SelectedIndexChanged(object sender, EventArgs e)
{
if (cboCurso.SelectedIndex > 0)
IdCurso = Convert.ToInt32(cboCurso.ValueMember);
Curso = cboCurso.SelectedText;
lbl4.Text = cboCurso.ValueMember;
}
sem sucesso
Alguém pode me ajudar?

Leandro Moura
   - 05 jul 2012

Consegui resolver o problema aqui...
O código ficou assim:

#Código
private void CarregaCurso()
{

DadosCursos objCurso = new DadosCursos();
List<GETS.Classes.DadosCursos.Cursos> listaCurso = new List<DadosCursos.Cursos>();
listaCurso = objCurso.Localizar();

foreach (var itemLista in listaCurso)
{
cboCurso.Items.Insert(0, Selecione);
cboCurso.SelectedIndex = 0;
cboCurso.DataSource = listaCurso;

cboCurso.ValueMember = IdCurso;
cboCurso.DisplayMember = Curso;

}

}


eu não tinha colocado o datasource e os valores do ValueMember e DisplayMember estavam errados

porém me deparei com outro problema...
Não aparece o Index 0 Selecione um curso

Como fazer para adicionar aos items?

0
|
0

Joel Rodrigues
   - 06 jul 2012

Amigo, tente inserir o item APÓS definir o DataSource.

0
|
0

Leandro Moura
   - 06 jul 2012

Tentei assim antes de colocar os valores:

#Código
private void CarregarCurso()
{

DadosCursos objCurso = new DadosCursos();
List<GETS.Classes.DadosCursos.Cursos> listaCurso = new List<DadosCursos.Cursos>();
listaCurso = objCurso.Localizar();

foreach (var itemLista in listaCurso)
{

cboCurso.DataSource = listaCurso;
cboCurso.Items.Insert(0,Selecione);
cboCurso.ValueMember = IdCurso;
cboCurso.DisplayMember = Curso;
}
}


e assim depois dos valores

Dá o seguinte erro:
Items collection cannot be modified when the DataSource property is set.

0
|
0

Joel Rodrigues
   - 09 jul 2012

Ao invés de inserir nos itens do combobox, tente inserir na própria lista e só então passá-la como datasource pro combo.

0
|
0

Leandro Moura
   - 25 jul 2012

Deu certo.
Inseri na lista e só depois passei a lista para o combo
Ficou assim:

#Códigoprivate void CarregarCurso()
{

DadosCursos objCurso = new DadosCursos();
List<GETS.Classes.DadosCursos.Cursos> listaCurso = new List<DadosCursos.Cursos>();
listaCurso = objCurso.Localizar();

DadosCursos.Cursos objSelecao = new DadosCursos.Cursos();
objSelecao.IdCurso = 0;
objSelecao.Curso = Selecione um curso;
listaCurso.Insert(0, objSelecao);

foreach (var itemLista in listaCurso)
{
cboCurso.DataSource = listaCurso;

cboCurso.ValueMember = IdCurso;
cboCurso.DisplayMember = Curso;
cboCurso.SelectedIndex = 0;
}
}

0
|
0

Joel Rodrigues
   - 25 jul 2012

Opa, que bom que deu certo.
Boa sorte em seus projetos.
Estou encerrando este tópico.

0
|
0