Ir para o conteúdo
garrido

[Resolvido] ComboBox sempre retorna [System.Data.DataRowView]

Mensagens Recomendadas

garrido

Ola estou com problema para entender o que acontece

Primeiro Tenho um combBox que é usado em vários forms. Por isso criei uma classe publica

combLoja

namespace oticaCharp2010.infra.apoio
{
public class comboLoja
{
	public static void preencheComboLoja(ComboBox combo)
	{
		combo.Items.Clear();
		// CRIA DADOS CONEXAO

		conString conec = new conString();
		string stringConexao = conString.retornaStringConexao();

		try
		{
			// CRIANDO CONSULTA
			string sql = "exec otica.dbo.spr_ler_loja";
			// CRIANDO DATA ADPTER
			SqlDataAdapter da = new SqlDataAdapter(sql, stringConexao);
			// CRIANDO UM DATA TABLE
			DataTable dtResultado = new DataTable();
			// PREENCHA DATA TABLE COM METODO FILL DO ADAPTER
			da.Fill(dtResultado);
			// AGORA JA TEM O DATA TABEL E ADICIONA AO DATA SOURCE
			combo.DataSource = dtResultado;

			combo.DisplayMember = "loja";
			combo.ValueMember = "codLoja";
	  }
		catch (Exception ex)
		{
			MessageBox.Show("NÃO PREENCHEU O COMBO\n\nERRO:" + ex.Message,	"ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error);
		}
	}
}
}

No form carrego a classe no InitializaComponent() com isso quero garantir que carreguei o combo antes de tudo.
public frmOperacionalTsoAlterar()
	{
		InitializeComponent();

		comboLoja.preencheComboLoja(cmbLoja);

	}


AQUI ESTA O PROBLEMA
private void cmbLoja_SelectedIndexChanged(object sender, EventArgs e)
   {
	   ComboBox comboBox = sender as ComboBox;

	   if (comboBox.SelectedIndex > -1)
	   {
		   string a = comboBox.SelectedItem.ToString();
		   global.usuario.loja = a.Trim();

	   }

Acontece que sempre recebo [system.Data.DataRowView] para o retorno do SelectedItem

O pedido é saber qual o motivo disso. E se possível corrigir.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
vikcch

DataRowView foi o que foi guardado como item na combobox...

se queres o valor mostrado na combobox podes usar:

if (comboBox.SelectedIndex > -1)
{
string a = comboBox.Text; // ou comboBox.SelectedValue para o "codLoja"
global.usuario.loja = a.Trim();

// ou
DataRowView drv = (DataRowView)comboBox.SelectedItem;
string a = drv.Row["loja"].ToString();  // ou codLoja
global.usuario.loja = a.Trim();
}

Eu prefiro criar um objecto (Freguesia) e o inserir na combobox em vez de usar o DataSource

ex:

	    private void loadCmbFreguesia()
    {
	    DataTable dt = runQuerySelect("SELECT [iD], [Nome] FROM Freguesias");
	    if (dt != null)
	    {
		    foreach (DataRow row in dt.Rows)
		    {
			    int ID = (int)row["ID"];
			    string nome = row["Nome"].ToString();				    
			    this.cmbFreguesia.Items.Add(new Freguesia(ID, nome));				    
		    }
	    }
	    dt.Dispose();
    }

    public DataTable runQuerySelect(string query)
    {
	    try
	    {
		    using (OleDbConnection conn = new OleDbConnection(connString))
		    {
			    conn.Open();

			    using (OleDbCommand CmdSql = new OleDbCommand(query, conn))
			    {
				    using (OleDbDataReader reader = CmdSql.ExecuteReader())
				    {
					    DataTable dt = new DataTable();
					    dt.Load(reader);

					    return dt;
				    }

			    }
		    }
	    }
	    catch (Exception err)
	    {
		    MessageBox.Show("Error: " + err.Message);
		    return null;
	    }

    }

    private void cmbFreguesia_SelectedIndexChanged(object sender, EventArgs e)
    {
	    var freguesia = (Freguesia)this.cmbFreguesia.SelectedItem;
	    string msg = string.Format("ID: {0}  -  Nome: {1}", freguesia.ID, freguesia.Nome);
	    MessageBox.Show(msg);
    }

Editado por vikcch

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.