garrido 0 Denunciar mensagem Publicado 22 de Abril de 2016 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 17 Denunciar mensagem Publicado 23 de Abril de 2016 (editado) 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 23 de Abril de 2016 por vikcch Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
garrido 0 Denunciar mensagem Publicado 24 de Abril de 2016 Agradeço atenção resolvido. Muito obrigado. 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 contaEntra
Já tem conta? Inicie sessão aqui.
Entrar Agora