У меня есть событие нажатия кнопки в одном пользовательском элементе управления, которое будет вычитать 1 из запаса ингредиентов в tbl_ingredients всякий раз, когда оно совпадает с ингредиентом, найденным в строковых массивах.
private void btn_confirm_Click(object sender, EventArgs e, string[] ings)
{
foreach (string s in ings)
{
string qry = "UPDATE tbl_ingredients SET inv_stock = inv_stock -1 WHERE inv_name = '" + s + "'";
SQLiteCommand myCommand = new SQLiteCommand(qry, myConnection);
myCommand.ExecuteNonQuery();
}
}
и динамически созданная tablelayoutpanel (для отображения всех ингредиентов и их соответствующего общего запаса) в другом пользовательском элементе управления
myConnection = new SQLiteConnection("Data Source=database.sqlite3");
string qry = "SELECT * FROM tbl_ingredients ORDER BY inv_name";
string qry2 = "SELECT COUNT(*) FROM tbl_ingredients";
SQLiteCommand myCommand = new SQLiteCommand(qry, myConnection);
SQLiteCommand myCommand2 = new SQLiteCommand(qry2, myConnection);
openConnection();
int row = Convert.ToInt32(myCommand2.ExecuteScalar());
SQLiteDataReader result = myCommand.ExecuteReader();
string[] itemname = new string[row];
string[] totalstock = new string[row];
int cnt = 0;
if (result.HasRows)
{
while (result.Read())
{
itemname[cnt] = result["inv_name"].ToString();
totalstock[cnt] = result["inv_stock"].ToString();
cnt++;
}
}
//tlb_inventory is the name of the tablelayoutpanel in windows form
tbl_inventory.ColumnCount = 2;
tbl_inventory.RowCount = row;
tbl_inventory.Controls.Add(new Label() { Text = "Item" }, 0, 0);
tbl_inventory.Controls.Add(new Label() { Text = "Total Stock" }, 1, 0);
for (int i = 1, j = 0; i < row + 1; i++, j++)
{
tbl_inventory.Controls.Add(new Label() { Text = itemname[j], AutoSize = true }, 0, i);
tbl_inventory.Controls.Add(new Label() { Text = totalstock[j], AutoSize = true }, 1, i);
}
closeConnection();
Каждый раз, когда я нажимаю на кнопку, она должна обновлять содержимое таблицы в реальном времени. Проблема в том, что мне нужно повторно запустить программу, чтобы она отображала обновленное содержимое таблицы. Есть ли функция или что-то, что заставит пользовательский элемент управления и его содержимое обновляться после нажатия кнопки?





Сначала вам нужно установить свойство name для элемента управления ярлыками
tbl_inventory.Controls.Add(new Label() { Name = "Total_"+ itemname[j], Text = totalstock[j], AutoSize = true }, 1, i);
а затем в событии button_click внутри цикла foreach добавьте:
Label c = (tbl_inventory.Controls.Find("Total_" + s, true).First() as Label);
var total = Convert.ToInt32(c.Text);
c.Text = (total++).ToString();
В вашем методе
btn_confirm_Clickнет никакого метода, который бы обновлял вашу таблицу. Где вы называете свой второй блок кода?