Problemas com combobox e List<>

03/07/2012

0

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

Leandro Moura

Responder

Posts

05/07/2012

Leandro Moura

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

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?
Responder

06/07/2012

Joel Rodrigues

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

06/07/2012

Leandro Moura

Tentei assim antes de colocar os valores:

      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.
Responder

09/07/2012

Joel Rodrigues

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.
Responder

25/07/2012

Leandro Moura

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

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;
                }
}
Responder

25/07/2012

Joel Rodrigues

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar