How to pass a Dataset to a custom UserControl and back again to the parent, persisting changes.

Hello Experts:

I am using C#, VS 2010 and ADO.Net developing a data base application.

I am struggling with making changes to my dataset.

I populate the dataset from my SQL server db with a table adapter, to get my strongly type dataset we'll call myDataSet

I have a TabControl which acts as a container for a series of custom Usercontrols.

In the constructor of the myTabControl, I populate myDataset using a data access layer.  myDataSet is now populated and ready for consumption by the custom user controls.

When the user selects a tab, I Add() myCustomUserControl to the tabPage.

What I want to do is to pass myDataset to myCustomUserControl in some way so that the user can perform CRUD operations on the dataset in myUsercontrol and keep myDataSet in sync as changes are made.  Right now, I am using a new Table Adapter to update the BD from myUserControl but then I get unexpected behaviour on myDataSet when switching to another tab etc. - espicially when I perform Delete operations on the datarows in myUsercontrol dataset.   (DataRowNotInTable exceptions and myDataset not in sync.)

Is there a slick way of doing this??

Who is Participating?
anarki_jimbelConnect With a Mentor Commented:
Not 100% sure I understand the problem properly but it seems that your current problem is that you have multiple datasets and they are not in sync.

OK, I believe you need just one DataSet and probably one DataAdapter that is shared by your Tab control and other User controls. In this case you do all operation on the same object using same dataadapter.

You may pass instances from your Tab control to user controls using constructors or, e.g. special Set methods like:

cmh_rwhelanAuthor Commented:
I am using the model you suggest - I pass the dataset to the constructor of myUsercontrol, but I get a RowNotInTable exception after i have deleted a row in myUserControl dataset  and have returned to another tab and try to access myDataset.
i think you can close your dataset from tab1 because your user control on tab2 is using the same dataset as tab1 using.
cmh_rwhelanAuthor Commented:
Passing the dataset to the constructor of the child usercontrol works.  Keeping track of the state of the dataset is a challenge as I navigate the tabs of the tabcontrol and make changes to the dataset.

I suspect my model for handling the UI is not very sound.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.