Как синхронизировать мой datatable из класса с datatable из другого класса?
Эй, я пытался синхронизировать свой datatable с datatable из другого класса. Вот моя цель. Я хочу создать кнопки динамической базы из продуктов в моем ProductTbl из моей базы данных. Теперь я увидел сообщение об этом, и оно отлично работает. [вот ссылка [^]]
Проблема в том, что всякий раз, когда я добавляю продукт, он не обновляется до тех пор, пока я не перезапущу программу.
У меня есть 2 пользовательских элемента управления. UC_Inventory и UC_Orders теперь все обслуживание выполняется в UC_Inventory, а метод DynamicButton() находится в UC_Orders
public void DynamicButton() //Function for retrieving record and creating a button for each product { dataTable.Clear(); string select = "select ProductID,ProductDesc,ProductPrice,ProductPic from ProductTbl"; sda = new SqlDataAdapter(select, sqlConn); sda.Fill(dataTable); sda.Update(dataTable); for (int i = 0; i < dataTable.Rows.Count; i++) { ExtendedButton prodBtn = new ExtendedButton(); //with ExtendedButton this time prodBtn._itemName = dataTable.Rows[i][1].ToString();//this asigns the product name to the extended button prodBtn._itemID = Convert.ToInt32(dataTable.Rows[i][0]); prodBtn._myPrice = Convert.ToDecimal(dataTable.Rows[i][2]); prodBtn.BackgroundImageLayout = ImageLayout.Stretch; prodBtn.Click += new EventHandler(OnButtonClick); prodBtn.Height = 100; prodBtn.Width = 100; System.Drawing.Font f1 = SystemFonts.DefaultFont; prodBtn.Font = new System.Drawing.Font(f1.FontFamily,f1.Size,FontStyle.Bold); prodBtn.Text = dataTable.Rows[i][1].ToString(); prodBtn.TextAlign = ContentAlignment.BottomCenter; prodBtn.ForeColor = Color.White; prodBtn.BackgroundImageLayout = ImageLayout.Zoom; toolTip1.Show(prodBtn.Text, prodBtn); byte[] image = (byte[])dataTable.Rows[i][3]; prodBtn.BackgroundImage = imgConverter.byteArrayToImage(image); prodBtn.TextAlign = ContentAlignment.MiddleCenter; flowPanel.Controls.Add(prodBtn); } dataTable.Clear(); }
Вот как создаются кнопки
и вот как я вставляю данные
private void SaveButton_Click(object sender, EventArgs e) { //FileStream fs = new FileStream(sourceTxt.Text, System.IO.FileMode.Open, System.IO.FileAccess.Read); try { byte[] prodImg; if (ItemPicBox.Image != null) prodImg = imgConverter.imageToByteArray(ItemPicBox.Image); else prodImg = imgConverter.imageToByteArray(initialImage); if (con.State != ConnectionState.Open) con.Open(); //SqlDataAdapter sda = new SqlDataAdapter("USE PASTRY_DB GO",con); SqlCommand command = con.CreateCommand(); command.CommandText = "addProduct_SP"; command.CommandType = CommandType.StoredProcedure; command.Parameters.Add("@ProductDesc", SqlDbType.Char,50).Value = NametxtBox.Text; command.Parameters.Add("@ProductTypeID", SqlDbType.Int).Value = Convert.ToInt32(CategoryComBox.SelectedValue); command.Parameters.Add("@Price", SqlDbType.Float).Value = float.Parse(PricetxtBox.Text); command.Parameters.Add("@Prodpic", SqlDbType.Image).Value = prodImg; int x = command.ExecuteNonQuery(); con.Close(); MessageBox.Show((x*-1).ToString() + " record saved","Added",MessageBoxButtons.OK,MessageBoxIcon.Information); NametxtBox.Text = ""; PricetxtBox.Text = ""; CategoryComBox.SelectedIndex = 0; ItemPicBox.Image = null; } catch(Exception rem){ con.Close(); MessageBox.Show(rem.Message); } }
Что я уже пробовал:
Я попробовал метод Refresh () пользовательского элемента управления, так как понял, что он обновляется всякий раз, когда я перезапускаю программу, и это не сработало.
Кроме того, когда я снова попытался вызвать метод DynamicButton (), Да, он обновился, но также дублировался. Это означает, что все кнопки, добавленные в FlowLayoutPanel при первом вызове метода DynamicButton, все еще там.
Извините за мой плохой английский
[no name]
Конечно, вы понимаете, что мы понятия не имеем, что все это значит, верно? Мы не можем видеть ваш код, ваш монитор или читать ваши мысли.