Tout d'abord, désolé pour mon anglais :)C# Créer des boutons à partir de la base de données avec la ligne manquante
Je voudrais créer des boutons automatiquement à partir de la base de données. Dans la base de données, chaque bouton possède un identifiant et j'appelle cet identifiant.
Mon problème est simple, Si l'un des ID manque (comme 1,2,4,5), le programme s'arrête après la deuxième lecture. Voici le code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace e_res
{
public partial class Layout : Form
{
public Layout()
{
InitializeComponent();
}
private void Layout_Load(object sender, EventArgs e)
{
SQLFunctions Lgn = new SQLFunctions();
Lgn.ConnectionToday();
SqlCommand cmd = new SqlCommand();
cmd.Connection = SQLFunctions.conn;
int NumOfButtons = 40;
int i = 1;
cmd.CommandText = "SELECT id FROM Buttons where id='" + i + "'";
int _bId = Int32.Parse(cmd.ExecuteScalar().ToString());
// int counter = 0;
while (_bId <= NumOfButtons)
{
if (_bId != null)
{
Button btn = new Button();
{
btn.Tag = _bId;
btn.Dock = DockStyle.Fill;
btn.Margin = new Padding(10, 10, 10, 10);
cmd.CommandText = "SELECT bName FROM Buttons where id='" + btn.Tag + "'";
btn.Text = cmd.ExecuteScalar().ToString();
string btn_name = cmd.ExecuteScalar().ToString();
btn.Name = btn_name.ToString();
/* btn.Click += delegate
{
pass_txt.Clear();
username_txt.Text = btn_name;
username_lbl.Text = btn_name;
username_lbl.Visible = true;
pass_txt.ReadOnly = false;
};*/
}
cmd.CommandText = "SELECT col FROM Buttons where id='" + btn.Tag + "'";
int btn_col = Int32.Parse(cmd.ExecuteScalar().ToString());
// MessageBox.Show(btn_col.ToString());
cmd.CommandText = "SELECT row FROM Buttons where id='" + btn.Tag + "'";
int btn_row = Int32.Parse(cmd.ExecuteScalar().ToString());
// MessageBox.Show(btn_row.ToString());
tableLayoutPanel4.Controls.Add(btn, btn_col, btn_row);
_bId++;
}
else
{
_bId++;
}
}
SQLFunctions.conn.Close();
}
private void button2_Click(object sender, EventArgs e)
{
NewButton nw = new NewButton();
nw.Show();
}
}
}
Merci
Tout d'abord, je vous suggère de réduire le nombre de requêtes, actuellement vous exécutez 3 par boucle. Je suggérerais 'select bname, col, row à partir des boutons où id <= NumOfButtons' en dehors de la boucle, puis accéder au jeu de résultats dans une boucle qui se termine quand il n'y a plus de lignes. Cela permettra également de résoudre votre problème actuel. –
@AlexK. Merci, mais à première vue je ne peux pas imaginer comment tu le penses. Pouvez-vous donner un exemple? – Dris