Hello,I want to ask on how I can create a master detail table form with vb net sqldataadapter, is there a way I can do it with the components properties? or do I have to write an sql command with sql's join statment?

2 solutions

Solution 1

Without knowing what you're going to do with that data, liek what control you're going to use to display this, and if you want the detail records for every row to be displayed without selecting a master row, we're just guessing.

But, if you're planning on using the DataGridView to try and achieve this, you'll be disappointed. Showing details in a subtable in a DGV isn't supported.

But, if you're only showing master records and then showing the detail records for a single selected master, you only need to retrieve the master records and show them, then when one of those is selected by the user, you can make a second query to get the details and show them in another control(s) somewhere.

If you're showing something of a report on your form with all the master and detail records displayed at the same time, then you'll have to write your query differently to return the two tables in a related set.

Hello Dave,I have configured 2 sqldataadapters 1 for master 1 for detail, I have generated 1 dataset from both (right click generate dataset), I dbl click the dataset and in the designer I cinnected the 2 tables of the adapters, in a relationship (drag the mouse from PK tb1 to FK tb2) I have textboxes for the 2 tables and a picturebox for the details (it has a blob field and 2 other fields). I have put buttons to navigate for both master and detail smthng like me.bindingcontex.dataset.position= me.bindingcontex.dataset.position + 1. When I press the next button for the master it changes the detail as well but when I press the button for the detail it goes through all the detail table not just the current master's detail records, I want to know if it is normal since I have created the relationship in the dataset. How I solved it? I insert a query in the detail adapter which has a parameter like search and through a textbox (which has the PK of the master) I give to the parameter the value for the FK of the detail, it works but I was wondering if it can be done without the query or am I doing smthing wrong with the first approach?

Solution 2

First, I avoid using the Designers at all costs and prefer to write all my database handling code myself. That way, I know EXACTLY what every piece of code is doing and there's no code hiding somewhere in the Designer generated files doing things without me knowing about it.

What do the queries look like for the master and detail? What does the code look like for populating the tables in the dataset? You ARE using a single dataset object, correct? What does the code look like for adding the relation between the tables? How about the code to bind the controls to data?

You should be setting the DataSource for the MasterBindingSource to the DataSet object and the DataMember property set to the name of the master table in your DataSet. Then you set the DetailsBindingSource.DataSource to the MasterBindingSource and set the DataMember property to the name of the details table in your DataSet.