Hashatjin Posted August 31, 2016 at 05:46 PM Report #598541 Posted August 31, 2016 at 05:46 PM Boas, preciso de ajuda urgente em algumas coisas sou novo cá ainda não entendo isto muito bem mas preciso de ajuda... Eu ando a programar algumas coisas em C# com utilização de database e Windows Forms... Eu gostaria de saber se alguém me pode recomendar alguns tutoriais sobre a utilização de querys para preencher uma datagridview usando informações variadas da database... Do género na figura seguinte da tabela eu queria trocar os números das selecções e dos estádios por os seus nomes repetitivos nomes... Alguém me pode me ajudar com as querys necessárias para isso?
apocsantos Posted August 31, 2016 at 06:20 PM Report #598542 Posted August 31, 2016 at 06:20 PM Boa tarde, Tuturial não conheço nenhum em particular. Existem alguns bons livros sobre C#. Na net encontras alguns engraçados e tens um bom artigo na revista PROGRAMAR C# CRUD (CREATE, READ, UPDATE & DELETE). Deixo aqui mais um link para um outro livro disponível na net. ftp://soporte.uson.mx/publico/02_ING.SISTEMAS.DE.INFORMACION/PVI/Beginning C%23 5.0 databases(1).pdf. Se só pretendes preencher uma gridview, cá fica um exemplo MySql.Data.MySqlClient.MySqlConnection conn; string myConnectionString; myConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test;"; try { conn = new MySql.Data.MySqlClient.MySqlConnection(); conn.ConnectionString = myConnectionString; conn.Open(); } catch (MySql.Data.MySqlClient.MySqlException ex) { MessageBox.Show(ex.Message); } private void DataGridDoMysql() { MySql.Data.MySqlClient.MySqlConnection conn; string myConnectionString; myConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test;"; try { conn = new MySql.Data.MySqlClient.MySqlConnection(); conn.ConnectionString = myConnectionString; conn.Open(); } catch (MySql.Data.MySqlClient.MySqlException ex) { MessageBox.Show(ex.Message); } MySqlDataAdapter MyDataAdapter = new MySqlDataAdapter(); string sqlSelectAll = "SELECT * from minhaTabela"; MyDA.SelectCommand = new MySqlCommand(sqlSelectAll, conn); DataTable table = new DataTable(); MyDataAdapter.Fill(table); BindingSource bSource = new BindingSource(); bSource.DataSource = table; dataGridView1.DataSource = bSource; } Cordiais cumprimentos, Apocsantos 2 Report "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"
Hashatjin Posted August 31, 2016 at 07:06 PM Author Report #598543 Posted August 31, 2016 at 07:06 PM Sim, entendo, obrigado pelos links... A ideia é apresentar a tabela que apresentei anteriormente só que em vez de aparecer nela a dizer o cod_estadio aparecer o nome do estádio vindo buscar essa informação a seguinte tabela... Problema já tentei todo tipo de querys... e nada... Se escrever o codigo para alterar o nome da tabela também agradecia!
apocsantos Posted August 31, 2016 at 07:31 PM Report #598544 Posted August 31, 2016 at 07:31 PM Boa tarde, Podes literalmente usar o mesmo código que usei anteriormente, apenas alteras a query. private void DataGridDoMysql() { MySql.Data.MySqlClient.MySqlConnection conn; string myConnectionString; myConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test;"; try { conn = new MySql.Data.MySqlClient.MySqlConnection(); conn.ConnectionString = myConnectionString; conn.Open(); } catch (MySql.Data.MySqlClient.MySqlException ex) { MessageBox.Show(ex.Message); } MySqlDataAdapter MyDataAdapter = new MySqlDataAdapter(); string sqlSelectAll = "SELECT euro2016.jogo.cod_estadio, euro2016.jogo.cod_tipo_jogo, euro2016.estadio.nome, euro2016.jogo.cod_selecao_1, euro2016.jogo.cod_selecao_2, euro2016.jogo.golos_selecao_1, euro2016.jogo.golos_selecao_2 from euro2016.jogo left join euro2016.estadio on (euro2016.jogo.cod_estadio = euro2016.estadio.cod_estadio)"; MyDA.SelectCommand = new MySqlCommand(sqlSelectAll, conn); DataTable table = new DataTable(); MyDataAdapter.Fill(table); BindingSource bSource = new BindingSource(); bSource.DataSource = table; dataGridView1.DataSource = bSource; } Cordiais cumprimentos, Apocsantos 1 Report "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"
Hashatjin Posted September 1, 2016 at 03:01 PM Author Report #598570 Posted September 1, 2016 at 03:01 PM Obrigado a query que disponibilizou ajudou bastante porem surgiu um problema... Onde aparece cod_selecão_2 ainda não consegui trocar pelos nomes das respectivas selecções... Select euro2016.jogo.data as Data , euro2016.tipo_jogo.tipo_jogo as Fase , euro2016.estadio.nome as Estadio, euro2016.selecao.nome as Seleção_1,euro2016.jogo.golos_selecao_1 as Golos, euro2016.jogo.cod_selecao_2, euro2016.jogo.golos_selecao_2 as Golos from euro2016.jogo left join euro2016.estadio on (euro2016.jogo.cod_estadio = euro2016.estadio.cod_estadio) left join euro2016.tipo_jogo on (euro2016.jogo.cod_tipo_jogo = euro2016.tipo_jogo.cod_tipo_jogo) left join euro2016.selecao on (euro2016.jogo.cod_selecao_1 = euro2016.selecao.cod_selecao) Também possui outra coisa que gostava de aprender, como adicionar informação a tabela sendo que as combobox presentes dispõe do nome presente nas outras tabelas e não dos números da tabela euro2016.jogo... A data também da um erro de ordem pois eu não consigo mudar o formato por mais que mude para yyyy-mm-dd ele depois de executar o programa ele volta ao estado anterior dd-mm-yyyy Aqui esta o código que eu estava a tentar fazer... A query muito provavelmente é o errado da coisa... Se não for tudo xD private void Add_Jogo_Click(object sender, EventArgs e) { MySqlConnection con = new MySqlConnection(@"server=localhost;user id=root;password=12345;database=euro2016"); con.Open(); if (selecao2.Text == selecao1.Text) { MessageBox.Show("Não pode colocar uma selação a jogar contra si mesma!"); } else { string t = "insert into (euro2016.tipo_jogo.tipo_jogo, euro2016.estadio.nome, euro2016.selecao.nome,euro2016.jogo.golos_selecao_1, euro2016.jogo.golos_selecao_2 from euro2016.jogo left join euro2016.estadio on (euro2016.jogo.cod_estadio = euro2016.estadio.cod_estadio) left join euro2016.tipo_jogo on (euro2016.jogo.cod_tipo_jogo = euro2016.tipo_jogo.cod_tipo_jogo) left join euro2016.selecao on (euro2016.jogo.cod_selecao_1 = euro2016.selecao.cod_selecao)) values ('" + comboBox1.Text + "','" + comboBox2.Text + "','" + selecao1.Text + "','" + Gol1.Text + "','" + Gol2.Text + "');"; MySqlCommand cmdDataBase = new MySqlCommand(t, con); cmdDataBase.ExecuteNonQuery(); MySqlDataReader myreader; try { myreader = cmdDataBase.ExecuteReader(); MessageBox.Show("Jogo Introduzido com Sucesso!"); while (myreader.Read()) { } } catch (Exception ex) { MessageBox.Show(ex.Message); } con.Close(); Obrigado pela atenção, Hashatjin
Hashatjin Posted September 1, 2016 at 09:01 PM Author Report #598580 Posted September 1, 2016 at 09:01 PM Preciso de ajuda no assunto Urgentemente ....
apocsantos Posted September 1, 2016 at 09:11 PM Report #598581 Posted September 1, 2016 at 09:11 PM Boa noite, Estou mesmo a parar, depois de umas horas "em distraction free mode", a programar. No final de jantar, respondo-te à tua duvida! A paciência e a perseverança, são boas características num programador! Aproveita e deixa-me se fazes o favor, o nome das tabelas onde armazenas as selecções, para poder fazer a query adequada. Cordiais cumprimentos, Apocsantos "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"
N3lson Posted September 1, 2016 at 09:21 PM Report #598582 Posted September 1, 2016 at 09:21 PM (edited) Aqui tens um exemplo usando o DataReader e personalizando headers da grid bem com os valores a retornar Este exemplo usa como baseDados o access mas no MySql é idêntico so tens de trocar o OLEBD.. por MySql... Confere os comentários para veres a razão de eu usar este método, desculpa a query e campos serem estes mas peguei num projecto meu para te ajudar // Listagem das aves public void aves(int id = 0, string sexo = "") { dataGridView1.DataSource = null; DataRow row = null; string query = "SELECT * FROM Aves "; if(sexo !="") { query += " WHERE sexo = "; switch (sexo) { case "M": query += "M"; break; case "F": query += "F"; break; } } if (id != 0) { query += " AND id = @id;"; } DataTable dt = new DataTable(); try { using (OleDbConnection con = new OleDbConnection(cfg.connectionString)) // Este constring é a string de ligar a base de dados { using(OleDbCommand cmd = new OleDbCommand( query, con)) { con.Open(); if (id != 0) { cmd.Prepare(); cmd.Parameters.AddWithValue("@id", id); } OleDbDataReader reader = cmd.ExecuteReader(); List<string> t = new List<string>() { "id", "Mutação", "Anilha", "Ano", "Sexo"}; DataColumn detalhes = new DataColumn("detalhes", typeof(Bitmap)); dt.Columns.Add(detalhes); foreach (string h in t) { dt.Columns.Add(h); } while (reader.Read()) { row = dt.NewRow(); Bitmap ver = new Bitmap(MS_ACESS.Properties.Resources.property); // Imagem para clicar row[0] = ver; row[1] = reader["id"]; row[2] = reader["mutacao"]; row[3] = reader["anilha"]; row[4] = reader["ano"]; row[5] = funcao.GetSexo(Convert.ToChar(reader["sexo"])); // usar funções personalizadas para apresentar texto no lugar de numeros que niguem sabe de que são e a que corresponde dt.Rows.Add(row); } dataGridView1.DataSource = dt; this.dataGridView1.Columns["id"].Visible = false; // Esconder id this.dataGridView1.Columns["detalhes"].FillWeight = 15; // Limitar tamanho da header para o que pretenderes this.dataGridView1.Columns["detalhes"].HeaderText = ""; // Esconder texto header (caso pretendas usar imagem) } con.Close(); } } catch (Exception ex) { MessageBox.Show(ex.Message); return; } } Edited September 1, 2016 at 09:26 PM by N3lson You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.
Hashatjin Posted September 1, 2016 at 09:30 PM Author Report #598583 Posted September 1, 2016 at 09:30 PM 17 minutos atrás, apocsantos disse: Boa noite, Estou mesmo a parar, depois de umas horas "em distraction free mode", a programar. No final de jantar, respondo-te à tua duvida! A paciência e a perseverança, são boas características num programador! Aproveita e deixa-me se fazes o favor, o nome das tabelas onde armazenas as selecções, para poder fazer a query adequada. Cordiais cumprimentos, Apocsantos O nome da tabela é selecao ... podes ver essa tabela na primeira imagem colocada na minha mensagem anterior...
apocsantos Posted September 1, 2016 at 11:14 PM Report #598587 Posted September 1, 2016 at 11:14 PM Boa noite, Então cá vai, primeiro o código em C# para a app, e depois o SQL separado para veres como se faz. Porque eu já sei fazer, fazer mais uma vez, menos uma vez, não faz grande diferença, mas para quem está a aprender todas as tentativas, são um passo na "jornada de mil milhas". private void DataGridDoMysql() { MySql.Data.MySqlClient.MySqlConnection conn; string myConnectionString; myConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test;"; try { conn = new MySql.Data.MySqlClient.MySqlConnection(); conn.ConnectionString = myConnectionString; conn.Open(); } catch (MySql.Data.MySqlClient.MySqlException ex) { MessageBox.Show(ex.Message); } MySqlDataAdapter MyDataAdapter = new MySqlDataAdapter(); string sqlSelectAll = "Select euro2016.jogo.data as Data , euro2016.tipo_jogo.tipo_jogo as Fase , euro2016.estadio.nome as Estadio , euro2016.selecao.nome as Seleção_1, euro2016.jogo.golos_selecao_1 as Golos_1, euro2016.selecao.nome as Seleção_1 as selecao_2, euro2016.jogo.golos_selecao_2 as Golos_2 from euro2016.jogo left join euro2016.estadio on (euro2016.jogo.cod_estadio = euro2016.estadio.cod_estadio) left join euro2016.tipo_jogo on (euro2016.jogo.cod_tipo_jogo = euro2016.tipo_jogo.cod_tipo_jogo) left join euro2016.selecao on (euro2016.jogo.cod_selecao_1 = euro2016.selecao.cod_selecao)"; MyDA.SelectCommand = new MySqlCommand(sqlSelectAll, conn); DataTable table = new DataTable(); MyDataAdapter.Fill(table); BindingSource bSource = new BindingSource(); bSource.DataSource = table; dataGridView1.DataSource = bSource; //altera aos cabeçalhos da dataGrid //como na tropa e na programação o zero também é numero dataGridView1.Columns[3].HeaderText = "1ª Selecção"; dataGridView1.Columns[5].HeaderText = "2ª Selecção"; //altera a formatação da data na datagrid: dataGrid.Columns[0].DefaultCellStyle.Format = "MM/dd/yyyy HH:MM:ss"; } Update usando bindingDataSource: private void ActualizarButton_Click(object sender, System.EventArgs e) { // Actualiza a base de dados com a informação que o utilizador colocou na datagridview dataAdapter.Update((DataTable)bSource.DataSource); } SQL Select euro2016.jogo.data as Data , euro2016.tipo_jogo.tipo_jogo as Fase , euro2016.estadio.nome as Estadio , euro2016.selecao.nome as Seleção_1, euro2016.jogo.golos_selecao_1 as Golos_1, euro2016.selecao.nome as Seleção_1 as selecao_2, euro2016.jogo.golos_selecao_2 as Golos_2 from euro2016.jogo left join euro2016.estadio on (euro2016.jogo.cod_estadio = euro2016.estadio.cod_estadio) left join euro2016.tipo_jogo on (euro2016.jogo.cod_tipo_jogo = euro2016.tipo_jogo.cod_tipo_jogo) left join euro2016.selecao on (euro2016.jogo.cod_selecao_1 = euro2016.selecao.cod_selecao) Adicionar informação como estas a usar bindingdatasource, tens tudo facilitado, caso contrario acabarias tendo de escrever um insert ou um update conforme fosse o caso. E antes que me esqueça a questão dos códigos de selecção, foi de certeza distracção! Olha bem para o meu SQL e para o teu! Repara no nome dos campos! 😄 Cordiais cumprimentos, Apocsantos "A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now