Member 12724527 Ответов: 0

Как синхронизировать мой 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]

Конечно, вы понимаете, что мы понятия не имеем, что все это значит, верно? Мы не можем видеть ваш код, ваш монитор или читать ваши мысли.

0 Ответов