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