Jak synchronizować bazę danych i DataGridView

Próbowałem zsynchronizować bazę danych aDataGridView. Do tej pory stworzyłem klasę modelu danych. Ta klasa zawiera wiele właściwości pasujących do bazy danych. Są mapowane za pomocą[Table] i[Column] atrybuty zSystem.Data.Linq.Mapping przestrzeń nazw.

Dobrze. Więc związałemDataGridView używającDataSource- Właściwość doDataContext połączenie z bazą danych (MSSQL). Ta logika jest zaimplementowana w asingel klasa, więc mogę zapewnić, że istnieje jeden taki przypadekDataContext.

 this.m_context = new DataContext(conn);
 this.m_VisitorTable = m_context.GetTable<Visitor>();

Cóż, jeśli przywiążę stół do mojegoDataGridView.DataSource Widzę wszystkie moje wpisy z bazy danych załadowane i wyświetlane poprawnie. Potem, jeśli coś zmienię, natknąłem się na problem synchronizacji. Zmieniona komórka nie zmieniła się po stronie bazy danych.

Aby zapisać zmiany, zaimplementowałem tę metodę:

public void SaveChanges()
{
    try
    {
       // I have no idea what I'm doing here.
       VisitorLogic.Instance.m_VisitorTable.Context.SubmitChanges(System.Data.Linq.ConflictMode.Con
       // I'm also trying to see if changes were made so I can save them before closing.
       this.m_bChangesMade = false;
    }
    catch (Exception ex)
    {
        MessageBox.Show("Failed to save.", "Error");
    }
 }

Czy istnieje sposób automatycznego synchronizowania całej bazy danych? Jak automatyczne zatwierdzanie zmian. Chyba będę musiał coś zmienić w klasie modelu. W tej chwili nie implementuje żadnych interfejsów ani niczego nie dziedziczy.

To jest deklaracja klasy:

[Table(Name = "tblVisitor")]
public class Visitor

Dalej nie znalazłem sposobu na aktualizację mojegoDataGridView "poprawnie". Oto jak teraz to robię, ale wygląda na to, że nie zawsze działa. Czy jest lepszy sposób, aby to zrobić?

// Retrieve the new data from the database
VisitorLogic.Instance.m_VisitorTable.Context.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, VisitorLogic.Instance.m_VisitorTable);


// Set the DataSource to 'null'
this.dataGridView.DataSource = null;

// Refresh (?!)
this.dataGridView.Refresh();

// Bind the new DataSource, hoping it will show the new data.
this.dataGridView.DataSource = VisitorLogic.Instance.m_VisitorTable;
this.m_bChangesMade = false;

Dzięki za pomoc!

questionAnswers(1)

yourAnswerToTheQuestion