4
private void UserList_Load(object sender, EventArgs e)
{
    // TODO: This line of code loads data into the 'workOrdersDataSet.users' table. You can move, or remove it, as needed.
    this.usersTableAdapter.Fill(this.workOrdersDataSet.users);
}

How can I reload the data if changes were made in another form? (preferably automatically without using a Refresh button)?

I am using WinForms and the backend is Access 2007.

The data is bound using the Designer to a Datagrid

Taryn
  • 242,637
  • 56
  • 362
  • 405
Cocoa Dev
  • 9,361
  • 31
  • 109
  • 177
  • Are you kidding? Your code refreshes the data and you're asking how to do it? – Tim Schmelter May 01 '12 at 19:35
  • Its not refreshing. Thats why I am asking – Cocoa Dev May 01 '12 at 19:39
  • You're referencing the same DataSet(instance) on the other form? – Tim Schmelter May 01 '12 at 19:43
  • How often does the data in `this.workOrdersDataSet.users` change? Does the command that fills it filter on values that might be updated? Can more than one form modify the data? How do you plan on dealing with concurrency? What are your users doing with the data once its in a DataGrid? – Conrad Frix May 01 '12 at 20:20
  • 1
    If you want to refresh your DataTable, you need to execute your query again to update the TableAdapter as well as binding into the dataTable. – Nick May 02 '12 at 00:19

2 Answers2

4

First, I would move the Fill to a separate function:

public void LoadData()
{
   this.usersTableAdapter.Fill(this.workOrdersDataSet.users);
}

Then when you do your Load Event, you will call the function:

private void UserList_Load(object sender, EventArgs e)
{
   LoadData();
}

If you have another form that performs changes on the data, you can call this function in another event, similar to this. I use DialogResult in my code:

private void OpenOtherForm()
{
    DialogResult openForm = new OtherForm().ShowDialog();
    if(openForm == DialogResult.OK)
        LoadData();
}

In your code for the other Form after your update process is complete, include a line of code to tell your main form to update:

private void PerformUpdate()
{
    try
    {
        // your update code goes here
        DialogResult = DialogResult.OK; // this is the line that tells your other form to refresh
    }
    catch (Exception ex)
    {
        DialogResult = DialogResult.Abort;
    }
}

using the DialogResult then, tells your main form to trigger the Refresh of the Data only when an Update actually takes place.

Taryn
  • 242,637
  • 56
  • 362
  • 405
  • I did your recommendation but the DataGridView did not update. My button code says private void buttonNewUser_Click(object sender, EventArgs e) { //NewUserForm nuf = new NewUserForm(); //nuf.Show(); OpenOtherForm(); } – Cocoa Dev May 02 '12 at 12:48
  • on your other form are you using the DialogResult? – Taryn May 02 '12 at 13:12
  • Im trying to clear the table to refresh the data grid Im using sqldata adapter and dataset with binding I can load the data but when I add new data to the datatable I need to refresh so it shows the new data being added I tried Dataset.Clear(); then after that I put DataAdapter.Fill(Dataset) the dataGrid is using the datamember and datasource bindings in the visual studio but that method is not working why it works, it should using Oledb but im using SQL Oledb – shawn Nov 07 '14 at 05:14
  • @shawn I'd suggest posting a new question with your code and include any errors, etc you are getting. – Taryn Nov 07 '14 at 09:56
1

You can add this line into another function, say

public void MoveDataToUI()
{
   this.usersTableAdapter.Fill(this.workOrdersDataSet.users);
}

and after call this function from the even handler, which is raised when someone changes something in another form.

Events tutorial

Tigran
  • 61,654
  • 8
  • 86
  • 123