GridView and DetailsView Master/Detail page using SqlDataSource control

The GridView and DetailsView controls are commonly used in a Master/Detail page. A Master/Detail page is a page that displays a list of items from a database along with the details of a selected item in the list. The DetailsView control is often used to display the details portion in a Master/Detail page.

The list of items can be displayed in a Master/Detail page using a DropDownList or a GridView control. In this example, we have used GridView control to display the list of items and DetailsView control to display the details of a selected item in the list.

In the example, we have used two data source controls, one to bind the GridView control and the other to bind the DetailsView control. The data source control which is connected to the GridView control retrieves all the items from the AccountsTable.

The data source control which is connected to the DetailsView control retrieves the single account details selected by the user in the GridView control. The datasouce control SqlDataSource1 is connected to the GridView control and the datasouce control SqlDataSource2 is connected to the DetailsView control.

<asp:GridView ID="GridView1" DataSourceID="SqlDataSource1" 
DataKeyNames="AccountCode"  AutoGenerateSelectButton="true" 
runat="server" />

<asp:DetailsView ID="DetailsView1" 
DefaultMode= "Edit"  AutoGenerateEditButton="true" AutoGenerateInsertButton="true" 
AutoGenerateDeleteButton="true"
DataSourceID="SqlDataSource2" 	runat="server">
</asp:DetailsView>
   
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 			
ConnectionString="<%$Connectionstrings:ERPConnectionString%>"
SelectCommand="SELECT AccountCode, AccountName FROM AccountsTable">
</asp:SqlDataSource> 

<asp:SqlDataSource ID="SqlDataSource2" 						
ConnectionString="<%$Connectionstrings:ERPConnectionString%>"
SelectCommand="SELECT * FROM AccountsTable Where AccountCode=@Code" 
UpdateCommand="Update AccountsTable 
SET AccountName=@AccountName,Accountdescription=@Accountdescription,
AccountPGroup=@AccountPgroup Where AccountCode=@AccountCode" 
runat="server">
<SelectParameters>
<asp:ControlParameter Name="Code" ControlID="GridView1"/>
</SelectParameters>
</asp:SqlDataSource>



output of GridView and DetailsView Master/Detail page using SqlDataSource control

The GridView control displays AccountCode and AccountName columns. The DetailsView control displays details of the single account which is selected by the user.

We need to enable a user to select a particular row in a GridView control when we want to build a single page Master/Detail page. To do so, we set the GridView control AutoGenerateSelectbutton property to 'true'. This results in a Select button for each row of the GridView rendered as LinkButton, as shown in Figure.

We also set the DefaultMode property of the DetailsView control to 'Edit' which results in the DetailsView control appearing in the EditMode. This is useful to enable the user to edit the data in a master/detail relationship. At runtime, when the user selects a record in the GridView, the selected record is displayed by the DetailsView control and this data can be edited.

How to Display the Selected row Details in a DetailsView in a Master/Detail page

To display the selected row, the Code parameter's value is first retrieved from the GridView control SelectedValue property.

The GridView control's SelectedValue property contains the first datakey value of the selected row. To do the above, the GridView's DataKeyNames property is set to AccountCode. When the user clicks on the Select button, a postback occurs and the GridView's SelectedValue property returns the AccountCode of the selected row, and the DetailsView shows the details of a selected account.

For the above to happen, the ControlParameter object is added to the SelectParameters collection of the SqlDataSource control (SqlDataSource2). Note that datasource control SqlDataSource2 is bound to the DetailsView control.

When using ControlParameter object, we need to set the ControlID property to point to the GridView control (GridView1). The ControlParameter represents the AccountCode of the selected account in the GridView control. When using a ControlParameter, we must always set the value of the ControlID property to point to a control on a page (here, GridView control).