Обновить таблицы из Gridviews

У меня есть форма Windows с 3 Gridviews (см. Скриншот), Один из видов сетки получает новое значение в пустой ячейке, два других получают новый ряд. При нажатии кнопки "Сохранить" я хочу обновить таблицу с добавленным значением и вставить новые строки в две другие таблицы. У меня есть большие трудности с определением правильного кода. Прямо сейчас у меня есть:

private void buttonSave_Click(object sender, EventArgs e)
{
   DataTable table1 = alereDataSet.Tables["immaster"];
   DataTable table2 = uPCDataSet.Tables["UPC"];
   DataTable table3 = hangtagDataSet.Tables["upccode"];
   DialogResult dr = MessageBox.Show("Are you sure you want to commit the values to the databases?", "Message", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
   if (dr == DialogResult.Yes)
   try
   {
      immasterTableAdapter.Update(table1.Select(null, null, DataViewRowState.CurrentRows));
      upccodeTableAdapter.Update(table3.Select(null, null, DataViewRowState.Added));
      uPCTableAdapter.Update(table2.Select(null, null, DataViewRowState.Added));
   }

   catch (System.Exception ex)
   {
      System.Windows.Forms.MessageBox.Show(ex.Message);
   }
}

Но когда я нажимаю сохранить ничего не происходит. У меня такое ощущение, что это из-за моих методов обновления таблиц. Две из трех таблиц являются таблицами VFP, а третья - таблицей SQL. Что мне нужно помочь, так это выяснить команду обновления. Две таблицы VFP не будут создавать метод Update автоматически, а код для таблицы SQL:

UPDATE UPC
SET UPCBarcode = @UPCBarcode, UPCNumber = @UPCNumber, ItemNumber = @ItemNumber, Itemdescrip = @Itemdescrip
WHERE (UPCBarcode = @Original_UPCBarcode) AND (@IsNull_UPCNumber = 1) AND (UPCNumber IS NULL) AND (@IsNull_ItemNumber = 1) AND (ItemNumber IS NULL) AND (@IsNull_Itemdescrip = 1) AND (Itemdescrip IS NULL) OR (UPCBarcode = @Original_UPCBarcode) AND (UPCNumber = @Original_UPCNumber) AND (@IsNull_ItemNumber = 1) AND (ItemNumber IS NULL) AND 
                      (@IsNull_Itemdescrip = 1) AND (Itemdescrip IS NULL) OR
                      (UPCBarcode = @Original_UPCBarcode) AND (@IsNull_UPCNumber = 1) AND (UPCNumber IS NULL) AND (ItemNumber = @Original_ItemNumber) AND 
                      (@IsNull_Itemdescrip = 1) AND (Itemdescrip IS NULL) OR
                      (UPCBarcode = @Original_UPCBarcode) AND (UPCNumber = @Original_UPCNumber) AND (ItemNumber = @Original_ItemNumber) AND 
                      (@IsNull_Itemdescrip = 1) AND (Itemdescrip IS NULL) OR
                      (UPCBarcode = @Original_UPCBarcode) AND (@IsNull_UPCNumber = 1) AND (UPCNumber IS NULL) AND (@IsNull_ItemNumber = 1) AND 
                      (ItemNumber IS NULL) AND (Itemdescrip = @Original_Itemdescrip) OR
                      (UPCBarcode = @Original_UPCBarcode) AND (UPCNumber = @Original_UPCNumber) AND (@IsNull_ItemNumber = 1) AND (ItemNumber IS NULL) AND 
                      (Itemdescrip = @Original_Itemdescrip) OR
                      (UPCBarcode = @Original_UPCBarcode) AND (@IsNull_UPCNumber = 1) AND (UPCNumber IS NULL) AND (ItemNumber = @Original_ItemNumber) AND 
                      (Itemdescrip = @Original_Itemdescrip) OR
                      (UPCBarcode = @Original_UPCBarcode) AND (UPCNumber = @Original_UPCNumber) AND (ItemNumber = @Original_ItemNumber) AND 
                      (Itemdescrip = @Original_Itemdescrip)

Не уверен, что еще я должен опубликовать. Пожалуйста, попросите больше кода, который, по вашему мнению, может иметь отношение

1 ответ

Решение

Ну, я думаю, что после недели ничего я наконец смог понять это. Обновление таблицы SQL было довольно простым, так как она создает свой собственный метод UPDATE при создании набора данных. Для таблиц VFP мне пришлось написать свою собственную команду UPDATE, которая для первой таблицы была

    UPDATE    immaster
    SET       item = ?, descrip = ?, upccode = ?
    WHERE     (item = ?)

и для второй таблицы VFP был

UPDATE    upccode
SET              item = ?, upccode = ?, memoupc = ?
WHERE     (item = ?)

Затем мне пришлось написать обработчик события для кнопки Сохранить:

//Save the data from the gridviews back to the respective tables
    private void buttonSave_Click(object sender, EventArgs e)
    {
        //Declare which tables get updated
        DataTable table1 = alereDataSet.Tables["immaster"];
        DataTable table2 = uPCDataSet.Tables["UPC"];
        DataTable table3 = hangtagDataSet.Tables["upccode"];
        DialogResult dr = MessageBox.Show("Are you sure you want to commit the values to the databases?", "Message", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
        if (dr == DialogResult.Yes)
            try
            {
                //Update immaster with the modified data
                immasterTableAdapter.Update(table1.Select(null, null, DataViewRowState.ModifiedCurrent));
                dataGridView1.Refresh();
                //Insert a new row in the upccode table with the values from the cells in the last row
                upccodeTableAdapter.Insert(dataGridView3.Rows[dataGridView3.Rows.Count - 1].Cells[0].Value.ToString(), dataGridView3.Rows[dataGridView3.Rows.Count - 1].Cells[1].Value.ToString(), ("Added " + System.DateTime.Now));
                dataGridView3.Refresh();
                //Insert a new row in UPC table with the values from the cells in the last row
                uPCTableAdapter.Insert(dataGridView2.Rows[dataGridView2.Rows.Count - 1].Cells[3].Value.ToString(), dataGridView2.Rows[dataGridView2.Rows.Count - 1].Cells[2].Value.ToString(), dataGridView2.Rows[dataGridView2.Rows.Count - 1].Cells[0].Value.ToString(), dataGridView2.Rows[dataGridView2.Rows.Count - 1].Cells[1].Value.ToString());
                dataGridView2.Refresh();
                clearTextboxes();
            }
            catch (SqlException ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
    }
Другие вопросы по тегам