Comment adapter plusieurs tables dans une datagridview
Fondamentalement, j'ai une application en c# qui prend des valeurs à partir d'un fichier texte, les stocke dans des listes et des transferts en SQLite tables.
Les trois tables sont nommés abc, t2 et t3 respectivement.
Je veux, puis de prendre ces sqlite tables et de les présenter dans l'application en c# dans datagridviews.
Jusqu'à présent, j'ai été en mesure de transférer 1 table (abc) pour l'affichage de la grille.
Je veux transférer tous les 3 tables pour le contrôle gridview.
Problème: je veux faire les 3 tables s'affichent dans UNE grille mais je ne connais pas la syntaxe sur la façon de faire de faire.
La suite est juste la façon dont les 3 tables sont remplies. Le plus important code (transfert de données vers le réseau) est en dessous de ce
//TRANSFERING VALUES TO THE SQLITE DB
private void button4_Click(object sender, EventArgs e)
{
//We use these three SQLite objects:
SQLiteConnection sqlite_conn;
SQLiteCommand sqlite_cmd;
SQLiteDataReader sqlite_datareader;
//create a new database connection: //Maybe error here - video was different
sqlite_conn = new SQLiteConnection(@"Data Source=database.db;Version=3;");
//open the connection:
sqlite_conn.Open();
//create a new SQL command:
sqlite_cmd = sqlite_conn.CreateCommand();
//Let the SQLiteCommand object know our SQL-Query:
sqlite_cmd.CommandText = "CREATE TABLE IF NOT EXISTS 'abc' (Seq text, Field text, Desc text, Len text, Dec text, Typ text, Percnt text, Pop text, Alzero text, MaxLen text );";
//Now lets execute the SQL
sqlite_cmd.ExecuteNonQuery();
//**** SQLITE TRANSFER SECTION 1 - transfer values from list1 to table1 *****
sqlite_cmd.CommandText = " DELETE FROM abc";
sqlite_cmd.ExecuteNonQuery();
sqlite_cmd.CommandText = "INSERT INTO abc (Seq, Field, Desc, Len, Dec, Typ, Percnt, Pop, Alzero, MaxLen) VALUES (@p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10)";
sqlite_cmd.Parameters.AddWithValue("@p1", 6); //dummy initial values
sqlite_cmd.Parameters.AddWithValue("@p2", 878);
sqlite_cmd.Parameters.AddWithValue("@p3", 56);
sqlite_cmd.Parameters.AddWithValue("@p4", 6);
sqlite_cmd.Parameters.AddWithValue("@p5", 546);
sqlite_cmd.Parameters.AddWithValue("@p6", 565);
sqlite_cmd.Parameters.AddWithValue("@p7", 568);
sqlite_cmd.Parameters.AddWithValue("@p8", 526);
sqlite_cmd.Parameters.AddWithValue("@p9", 586);
sqlite_cmd.Parameters.AddWithValue("@p10", 526);
for (int i = 0; i < NumListValues; i += 10) //Filling SQlite table rows and columns with values from our list
{
sqlite_cmd.Parameters.AddWithValue("@p1", list[i]);
sqlite_cmd.Parameters.AddWithValue("@p2", list[i+1]);
sqlite_cmd.Parameters.AddWithValue("@p3", list[i+2]);
sqlite_cmd.Parameters.AddWithValue("@p4", list[i+3]);
sqlite_cmd.Parameters.AddWithValue("@p5", list[i+4]);
if (i > 490)
break;
sqlite_cmd.Parameters.AddWithValue("@p6", list[i+5]);
sqlite_cmd.Parameters.AddWithValue("@p7", list[i+6]);
sqlite_cmd.Parameters.AddWithValue("@p8", list[i+7]);
sqlite_cmd.Parameters.AddWithValue("@p9", list[i+8]);
sqlite_cmd.Parameters.AddWithValue("@p10", list[i+9]);
sqlite_cmd.ExecuteNonQuery();
}
// **** SQLITE TRANSFER SECTION 2 - transfer values from list2 to 2nd table *****
sqlite_cmd.CommandText = "CREATE TABLE IF NOT EXISTS 't2' (YYMM text, MinDate text, MaxDate text, TotalTrans text, DebitTrans text, AMOUNTINDOCUMENTCURREN text );";
sqlite_cmd.ExecuteNonQuery();
sqlite_cmd.CommandText = " DELETE FROM t2";
sqlite_cmd.ExecuteNonQuery();
sqlite_cmd.CommandText = "INSERT INTO t2 (YYMM, MinDate, MaxDate, TotalTrans, DebitTrans, AMOUNTINDOCUMENTCURREN ) VALUES (@b1, @b2, @b3, @b4, @b5, @b6)";
sqlite_cmd.Parameters.AddWithValue("@b1", 6); //dummy initial values
sqlite_cmd.Parameters.AddWithValue("@b2", 878);
sqlite_cmd.Parameters.AddWithValue("@b3", 56);
sqlite_cmd.Parameters.AddWithValue("@b4", 6);
sqlite_cmd.Parameters.AddWithValue("@b5", 546);
sqlite_cmd.Parameters.AddWithValue("@b6", 565);
for (int i = 0; i < NumList2Values; i+= 6) //Filling SQlite table rows and columns with values from list2
{
sqlite_cmd.Parameters.AddWithValue("@b1", list2[i]);
sqlite_cmd.Parameters.AddWithValue("@b2", list2[i+1]);
sqlite_cmd.Parameters.AddWithValue("@b3", list2[i+2]);
sqlite_cmd.Parameters.AddWithValue("@b4", list2[i+3]);
sqlite_cmd.Parameters.AddWithValue("@b5", list2[i+4]);
sqlite_cmd.Parameters.AddWithValue("@b6", list2[i+5]);
sqlite_cmd.ExecuteNonQuery();
}
//Create table to transfer values from list 3
sqlite_cmd.CommandText = "CREATE TABLE IF NOT EXISTS 't3' (YYWW text, MinDate text, MaxDate text, TotalTrans text, DebitTrans text, AMOUNTINDOCUMENTCURREN text );";
sqlite_cmd.ExecuteNonQuery();
sqlite_cmd.CommandText = " DELETE FROM t3";
sqlite_cmd.ExecuteNonQuery();
sqlite_cmd.CommandText = "INSERT INTO t3 (YYWW, MinDate, MaxDate, TotalTrans, DebitTrans, AMOUNTINDOCUMENTCURREN ) VALUES (@c1, @c2, @c3, @c4, @c5, @c6)";
sqlite_cmd.Parameters.AddWithValue("@c1", 6); //dummy initial values
sqlite_cmd.Parameters.AddWithValue("@c2", 878);
sqlite_cmd.Parameters.AddWithValue("@c3", 56);
sqlite_cmd.Parameters.AddWithValue("@c4", 6);
sqlite_cmd.Parameters.AddWithValue("@c5", 546);
sqlite_cmd.Parameters.AddWithValue("@c6", 565);
for (int i = 0; i < NumList3Values ; i+= 6) //Filling SQlite table rows and columns with values from list2
{
sqlite_cmd.Parameters.AddWithValue("@c1", list3[i]);
sqlite_cmd.Parameters.AddWithValue("@c2", list3[i+1]);
sqlite_cmd.Parameters.AddWithValue("@c3", list3[i+2]);
sqlite_cmd.Parameters.AddWithValue("@c4", list3[i+3]);
sqlite_cmd.Parameters.AddWithValue("@c5", list3[i+4]);
sqlite_cmd.Parameters.AddWithValue("@c6", list3[i+5]);
sqlite_cmd.ExecuteNonQuery();
}
Les suivants est la façon dont je remplir la grille de données avec les valeurs de la première table
string sql = " SELECT * FROM abc";
SQLiteDataAdapter da;
DataTable dt;
sqlite_cmd.CommandText = sql;
//Create New Datatable to fill with data
dt = new DataTable();
//Create DataAdapter to fill data in DataTable via Adapter
da = new SQLiteDataAdapter(sql, sqlite_conn);
da.Fill(dt);
//Lets populate the datagrid
dataGridView1.DataSource = dt;
dataGridView1.Refresh();
Vous devez vous connecter pour publier un commentaire.
DataGridView
ne peut traiter que d'une seule table, et donc vous devez les combiner toutes vos tables en un seul. Vous avez différentes options pour ce faire, et dépend aussi de la façon dont vous souhaitez effectuer la fusion exactement. Exemple de code:Ce code provient de l'hypothèse que vous souhaitez mettre toutes les colonnes de chaque
DataTable
l'un après l'autre (tous lesabc
colonnes, puist2
/t3
ceux); mais l'algorithme est assez clair et que vous ne trouverez pas de problème pour l'adapter à vos besoins spécifiques.La réponse dépend de la façon dont vous souhaitez formater les données que vous voulez afficher. Je suppose que vous voulez quelque chose comme [abc-col1][abc-col2][t2-col1] ...[t3-col3]
Une façon rapide et sale pour ce faire serait d'utiliser un "datarow' et de combiner les données comme vous le voyez il fit dans une nouvelle datatable;
il suffit de remplacer le [i,j] pièces avec l'index de la valeur réelle que vous souhaitez combiner, et vous avez terminé! vous devrez peut-être ajouter une autre boucle si vous avez plusieurs colonnes par datatable, j'imagine que vous faites. Après avoir fait le nouveau combiné datatable, il suffit que le datagridview source comme vous l'avez fait ci-dessus.
Espère que ça aide. Des acclamations.