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ódigo

private 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