Problema ao adicionar dados a uma combobox - C# - Portugal-a-Programar
Problema ao adicionar dados a uma combobox
Por bracara, 22 de Dezembro de 2016 em C#
bracara 0
Publicado 22 de Dezembro de 2016 (editado)
Sou bastante noob nestas andanças e estava a fazer uns teste em C# e Visual Studio e deparei-me com um problema ao carregar os dados do mySql para uma combobox. Se Carregar normalmente, como já vi em vários locais tudo corre bem, mas precisava de ter uma primeira opção com o item - Novo -.
Aqui começaram os problemas. Se crio primeiro esse item e depois mando carregar com os dados da datatable o item desaparece. Tentei iterar sobre as linhas da data table mas apenas aparecia a informação sobre o campo onde estavam armazenados os dados e não os dados em si.
Tive que iterar novamente sobre cada elemento em cada linha e escrever apenas o que precisava (estava na posição 1 do array).
Está a funcionar correctamente mas parece-me que deve haver uma maneira mais compacta de resolver o problema. Deixo aqui o código para alguém com mais experiência me possa indicar uma solução mais refinada e correcta.
ConexaoMySQL.Ligar();
string inserir = "SELECT * FROM cidade ";
ConexaoMySQL.comandos(inserir);
MySqlDataReader dr = ConexaoMySQL.comando.ExecuteReader();
cmbAtletaCidade.Items.Insert(0, "- Novo -");
foreach (DataRow dado in dt.Rows)
item = dado.ItemArray;
cmbAtletaCidade.Items.Add(item[1]);
ConexaoMySQL.Desligar();
Editado 22 de Dezembro de 2016 por bracara
N3lson 17
http://www.aspsnippets.com/Articles/Add-Default-Item-Initial-Value-to-DataBound-DropDownList-populated-from-Database-in-ASPNet-using-C-and-VBNet.aspx
Editado 31 de Dezembro de 2016 por N3lson
Tens 2 formas de fazer isso. A mais facil é na tua querry adicionares esse novo item
SELECT 'Novo'
SELECT Nome FROM Cidades
e assim já tens no DataSet ou DataTable a lista com esse valor.
Em alternativa adicionas à tabela uma row e depois passas a tabela para a combo.
dr[1] = "Novo";
ds.Tables[0].Rows.InsertAt(dr, 0);
cmbCidades.DataSource = ds.Tables[0];
cmbCidades.ValueMember = "ID";
cmbCidades.DisplayMember = "Descricao";
Tens que adaptar ao teu caso, aí nesse é só no caso se tiveres a combo a guardar 2 valores, o ID e o nome da cidade