На самом деле я довольно новичок в C#. У меня есть две таблицы в базе данных, названные «Категории» и «MenuItems» соответственно. Я хочу, чтобы при загрузке формы я получал все строки категорий из базы данных и отображал их в виде текста на динамически генерируемых кнопках (количество кнопок зависит от количества строк категории). Я уже выполнил это с помощью следующего кода:
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=Shezi;Initial Catalog=RMS;Integrated Security=True";
SqlCommand cmd = new SqlCommand();
con.Open();
string commandText = "select Categories From Categories";
cmd = new SqlCommand(commandText, con);
SqlDataReader sdr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(sdr);
con.Close();
int btnName = 0;
if (dt.Rows.Count>0)
{
btnName++;
int PosY = 5;
int rowCount = -1;
int numOfRows = dt.Rows.Count;
for(int i=0; i<numOfRows; i++)
{
rowCount++;
foreach (DataRow row in dt.Rows)
{
variables.btnText = dt.Rows[rowCount].Field<string>(0);
}
Button button = new Button();
button.Enabled = true;
button.Text = variables.btnText;
button.BackColor = Color.Green;
button.ForeColor = Color.White;
button.Width = 150;
button.Height = 50;
button.Name = "button" + btnName;
button.Location = new Point(-2, PosY);
button.Font = new Font("Georgia", 12);
button.Click += Button_Click;
panel.Controls.Add(button);
PosY += 55;
}
}
}
Мой код «Выше» генерирует динамические кнопки c на основе строк категории из базы данных, и вот моя главная проблема: я хочу, чтобы пользователь нажимал на любую из динамически генерируемых кнопок, текст эту кнопку следует искать в пунктах меню (очевидно, текст кнопки будет текстом категории), приложение должно искать этот текст в строках MenuItems и отфильтровывать все элементы MenuItem, сохраненные для этой категории (например, если динамически сгенерированная кнопка имела текст) Burger ", программа должна извлечь все элементы меню из категории Burger и отобразить их на более новых сгенерированных динамических c кнопках). Аналогичным образом, если нажата кнопка с категорией Cheese, она должна выбрать и создать новые динамические c кнопки a и заполнить пункты меню сыра. Это то, что я пытался получить новыми динамическими c кнопками, основанными на щелчке кнопок:
private void btn1_Click(object sender, EventArgs e)
{
dt = manager.GetMenuItems(menuItems);
var count = dt.Rows.Count;
//int btnName = 0;
int PosX = 160;
int rowCount = -1;
for (int i = 0; i < count; i++)
{
//btnName++;
rowCount++;
foreach (DataRow row in dt.Rows)
{
menuItems.MenuText = dt.Rows[rowCount].Field<string>(0);
//categories.btnText = row.Field<string>("Categories", DataRowVersion.Original);//do not undo
DataView dv = dt.DefaultView;
dv.RowFilter = "MenuItem = MenuItem";
DataTable dt1 = dv.ToTable();
menuItems.MenuText = dt1.ToString();
}
//string btnText = count.ToString();
Button btn1 = new Button();
btn1.Enabled = true;
btn1.Text = menuItems.MenuText;
btn1.BackColor = Color.Navy;
btn1.ForeColor = Color.White;
btn1.Width = 150;
btn1.Height = 50;
btn1.Name = "btn1";
btn1.Location = new Point(PosX, 10);
btn1.Font = new Font("Georgia", 12);
btn1.Click += new EventHandler(btn1_Click);
pnlCategories.Controls.Add(btn1);
PosX += 150;
//var newvalue = ds.Tables[0].Rows[1].ItemArray[0].ToString();
}
}
Я искал много способов, но не мог найти ничего подобного, я пробовал разные темы на stackoverflow тоже, но не повезло, нужна помощь!