Search code examples
c#asp.net-mvc-3webgrid

Multiple WebGrid on a single view updating all WebGrid on any action


I have 2 WebGrid on a Single View which are using same model. Now the problem is that whenever I apply sorting on a single webgrid, it is also sorting another webgrid. I am using fieldNamePrefix still having problem. Here is my code:

1st Partial View:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<CRMEvent.Models.CRM.DatabaseEntities.CRM_Dashboard_Requests>>" %>
<%    
     var grid = new WebGrid(source: Model, defaultSort: "CRM_ID",fieldNamePrefix:"grid2", canSort: true);%>
<%=
        grid.GetHtml( htmlAttributes: new { id = "grid2" },tableStyle: "GridTable", headerStyle: "GridHeader", columns: grid.Columns(
          grid.Column(columnName: "CRM_ID", header: "CRM ID", canSort: true),
         grid.Column(columnName: "MDLNO", header: "MDLNO", canSort: true),
         grid.Column(columnName: "EMP_Name", header: "Employee", canSort: true),
         grid.Column(columnName: "SERVICE_TYPE", header: "Service Type", canSort: true),
         grid.Column(columnName: "Requested_Amount", header: "Amount", canSort: true),
                 grid.Column(columnName: "Created_Date", header: "Date", canSort: true, format: item => item.Created_Date.ToString("dd-MM-yyyy"))
         ))
   %>

2nd Partial View:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<ApricaCRMEvent.Models.CRM.DatabaseEntities.CRM_Dashboard_Requests>>" %>
 <%    
     var grid = new WebGrid(source: Model, defaultSort: "CRM_ID",fieldNamePrefix:"grid1", canSort: true);%>
     <%=
        grid.GetHtml( htmlAttributes: new { id = "grid1" },tableStyle: "GridTable", headerStyle: "GridHeader", columns: grid.Columns(
          grid.Column(columnName: "CRM_ID", header: "CRM ID", canSort: true),
         grid.Column(columnName: "MDLNO", header: "MDLNO", canSort: true),
         grid.Column(columnName: "EMP_Name", header: "Employee", canSort: true),
         grid.Column(columnName: "SERVICE_TYPE", header: "Service Type", canSort: true),
         grid.Column(columnName: "Requested_Amount", header: "Amount", canSort: true),
                 grid.Column(columnName: "Created_Date", header: "Date", canSort: true, format: item => item.Created_Date.ToString("dd-MM-yyyy"))
         ))
   %>

Solution

  • There is property named "ajaxUpdateContainerId" in webgrid. This property could help you to solve your problem.

    1st partial view

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<CRMEvent.Models.CRM.DatabaseEntities.CRM_Dashboard_Requests>>" %>
    <%    
     var grid1 = new WebGrid(source: Model, defaultSort: "CRM_ID",fieldNamePrefix:"grid2", canSort: true, ajaxUpdateContainerId:"FirstDiv");%>
    <div id="FirstDiv">
    <%=
        grid1.GetHtml( htmlAttributes: new { id = "grid2" },tableStyle: "GridTable", headerStyle: "GridHeader", columns: grid.Columns(
          grid1.Column(columnName: "CRM_ID", header: "CRM ID", canSort: true),
         grid1.Column(columnName: "MDLNO", header: "MDLNO", canSort: true),
         grid1.Column(columnName: "EMP_Name", header: "Employee", canSort: true),
         grid1.Column(columnName: "SERVICE_TYPE", header: "Service Type", canSort: true),
         grid1.Column(columnName: "Requested_Amount", header: "Amount", canSort: true),
                 grid1.Column(columnName: "Created_Date", header: "Date", canSort: true, format: item => item.Created_Date.ToString("dd-MM-yyyy"))
         ))
    %>
    </div>
    

    2nd Partial View

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<ApricaCRMEvent.Models.CRM.DatabaseEntities.CRM_Dashboard_Requests>>" %>
     <%    
     var grid = new WebGrid(source: Model, defaultSort: "CRM_ID",fieldNamePrefix:"grid1", canSort: true, ajaxUpdateContainerId:"SecondDiv");%>
     <div id="SecondDiv">
    <%=
        grid.GetHtml( htmlAttributes: new { id = "grid1" },tableStyle: "GridTable", headerStyle: "GridHeader", columns: grid.Columns(
          grid.Column(columnName: "CRM_ID", header: "CRM ID", canSort: true),
         grid.Column(columnName: "MDLNO", header: "MDLNO", canSort: true),
         grid.Column(columnName: "EMP_Name", header: "Employee", canSort: true),
         grid.Column(columnName: "SERVICE_TYPE", header: "Service Type", canSort: true),
         grid.Column(columnName: "Requested_Amount", header: "Amount", canSort: true),
                 grid.Column(columnName: "Created_Date", header: "Date", canSort: true, format: item => item.Created_Date.ToString("dd-MM-yyyy"))
         ))
      %>
      </div>