Introduction
In this post, I explain how to Display Master/Detail Data from a Database using ListView and GridView Control in ASP.NET.Steps :
Step - 1 : Create New Project.
Go to File > New > Project > Select asp.net web forms application > Entry Application Name > Click OK.Step-2: Add a Database.
Go to Solution Explorer > Right Click on App_Data folder > Add > New item > Select SQL Server Database Under Data > Enter Database name > Add.Step-3: Create 2 table for Master Details Record.
Open Database > Right Click on Table > Add New Table > Add Columns > Save > Enter table name > Ok.Step-4: Add Entity Data Model.
Go to Solution Explorer > Right Click on Project name form Solution Explorer > Add > New item > Select ADO.net Entity Data Model under data > Enter model name > Add.A popup window will come (Entity Data Model Wizard) > Select Generate from database > Next >
Chose your data connection > select your database > next > Select tables > enter Model Namespace > Finish.
Step-5: Add a Webpage and Design for show Master Details Record using ListView & Gridview Control in Webpage.
Go to Solution Explorer > Right Click on Project name form Solution Explorer > Add > New item > Select web form/ web form using master page under Web > Enter page name > Add.DXR.png image is this :
CSS Code
<style type="text/css"> .collapse { background-position: left -172px; height: 14px; width: 13px; background-repeat: no-repeat; background-image: url('DXR.png'); cursor:pointer; } .expand { background-position: -14px -187px; height: 14px; width: 13px; background-repeat: no-repeat; background-image: url('DXR.png'); cursor:pointer; } table { border:solid 1px black; } table td { border-right:solid 1px black; border-bottom:solid 1px black; } table th { border-bottom:solid 1px black; } .SUBDIV table { border:0px; border-left:1px solid black; } </style>JS Code
<script src="Scripts/jquery-1.7.1.js"></script> <script language="javascript"> $(document).ready(function () { // THIS IS FOR HIDE ALL DETAILS ROW $(".SUBDIV table tr:not(:first-child)").not("tr tr").hide(); $(".SUBDIV .btncolexp").click(function () { $(this).closest('tr').next('tr').toggle(); //this is for change img of btncolexp button if ($(this).attr('class').toString() == "btncolexp collapse") { $(this).addClass('expand'); $(this).removeClass('collapse'); } else { $(this).removeClass('expand'); $(this).addClass('collapse'); } }); }); </script>HTML Code
<h3>Master Details Record using ListView & Gridview Control in ASP.NET</h3> <div> <asp:ListView ID="ListView1" runat="server" OnItemDataBound="ListView1_ItemDataBound"> <LayoutTemplate> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <th width="15px"></th> <th width="15%">Customer Code</th> <th width="25%">Customer Name</th> <th width="20%">Contact No</th> <th width="20%">State</th> <th>City</th> </tr> </table> <div runat="server" id="itemPlaceHolder"></div> </LayoutTemplate> <ItemTemplate> <div class="SUBDIV" runat="server"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="15px"> <div class="btncolexp collapse"> </div> </td> <td width="15%"><%#Eval("CustomerCode") %></td> <td width="25%"><%#Eval("CustomerName") %></td> <td width="20%"><%#Eval("ContactNo") %></td> <td width="20%"><%#Eval("State") %></td> <td><%#Eval("City") %></td> </tr> <tr> <td colspan="6"> <div style="margin:20px"> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"> <Columns> <asp:BoundField HeaderText="Order ID" DataField="OrderID" /> <asp:BoundField HeaderText="Order No" DataField="OrderNo" /> <asp:BoundField HeaderText="Order Date" DataField="OrderDate" /> <asp:BoundField HeaderText="Quantity" DataField="Quantity" /> <asp:BoundField HeaderText="UnitPrice" DataField="UnitPrice" /> <asp:BoundField HeaderText="Total" DataField="TotalAmount" /> </Columns> </asp:GridView> </div> </td> </tr> </table> </div> </ItemTemplate> </asp:ListView> </div>
Step-6: Write code in page_load event for fetch Master data from database and bind to ListView Control for show master details record in webpage.
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { PopulateData(); } }
private void PopulateData() { using (MyDatabaseEntities dc = new MyDatabaseEntities()) { var v = dc.Customers.ToList(); ListView1.DataSource = v; ListView1.DataBind(); } }
Step-7: Write code in ListView1_ItemDataBound event for fetch corresponding details record and bind it to the Gridview(inside ListView).
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e) { if (e.Item.ItemType == ListViewItemType.DataItem) { ListViewDataItem lvItem = (ListViewDataItem)e.Item; Customer cus = (Customer)lvItem.DataItem; if (cus != null) { GridView gv1 = (GridView)e.Item.FindControl("GridView1"); if (gv1 != null) { using (MyDatabaseEntities dc = new MyDatabaseEntities()) { var v = dc.OrderMasters.Where(a => a.CID.Equals(cus.CID)).ToList(); gv1.DataSource = v; gv1.DataBind(); } } } } }