This is a migrated thread and some comments may be shown as answers.

[Solved] MVC Master/Detail Grid pagination not working and Detail View data is not shown

0 Answers 23 Views
Grid
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
Vivek
Top achievements
Rank 1
Vivek asked on 25 Jan 2012, 11:02 AM
Hi,
I am using a MVC Master/Detail grid as shown in the code example below. However I am not able to get the Pagination working and the Detail grid data is not shown. The Master/Detail grid shows data based on certain search parameters like "Date", "TripName" or "Status" etc. Please let me know your suggestions to solve this problem. Your feedback will certainly be appreciated.

                
                    @(Html.Telerik().Grid((IEnumerable<web_travel.Models.TripViewModel>) ViewData["TripViewModelData"])
                         .Name("TripViewModels")
                         .DataKeys(keys => keys.Add(t => t.TripId)) 
                         .Columns(columns =>
                         {
                             columns.Bound(t => t.Traveler).Width(140);
                             columns.Bound(t => t.TripName).Width(140);
                             columns.Bound(t => t.Depart).Width(140);
                             columns.Bound(t => t.Return).Width(140);
                             columns.Bound(t => t.Status).Width(140);
                             columns.Bound(t => t.Amount).Width(140);
                             columns.Template(@<text> <a href="@item.Detail?Id=@item.TripId"><img src='/Content/images/btn_arrow_right.gif'> </text>).Title("Detail").Width(70);
                         })
                        .ClientEvents(events => events.OnRowDataBound("trips_onRowDataBound"))


                        .DetailView(details => details.ClientTemplate(
                        Html.Telerik().Grid((IEnumerable<web_travel.Models.TripDetailsViewModel>)ViewData["TripDetailsViewModelData"])
                                .Name("TripDetailsViewModels")
                                .Columns(columns =>
                                {
                                    columns.Bound(d => d.RecordLocator).Width(101);
                                    columns.Bound(d => d.AirDepart).Width(140);
                                    columns.Bound(d => d.AirReturn).Width(200);
                                })
                                   .DataBinding(dataBinding => dataBinding.Ajax()
                                   .Select("View", "Itinerary", new { Model = Model, Filter = "" })
                                   )
                                   .Pageable(paging => paging.PageSize(5))
                                   .Scrollable(scrolling => scrolling.Height(300))
                                   .Sortable()
                                   .ToHtmlString()
                        ))
                    .DataBinding(dataBinding => dataBinding.Ajax()
                    .Select("View", "Itinerary", new { Model = Model, Filter = "" })
                    )
                    .Pageable(paging => paging.Enabled(true).PageSize(5))
                    .ClientEvents(clientEvents => clientEvents.OnDataBinding("onDataBinding"))
                    .Scrollable(scrolling => scrolling.Height(300))
                    .Sortable()
                    .HtmlAttributes(new { style = "height: 300px;" })
                                     )
                
                    <script type="text/javascript">


                        $(window).load(function ()
                        {
                            $("#TripViewModels").data("tGrid").pageTo(1);
                        });
 


                        function expandFirstRow(grid, row)
                        {
                            if (grid.$rows().index(row) == 0)
                            {
                                grid.expandRow(row);
                            }
                        }


                        function trips_onRowDataBound(e)
                        {
                            var grid = $(this).data('tGrid');
                            expandFirstRow(grid, e.row);
                        }


                        function tripDetails_onRowDataBound(e)
                        {
                            var grid = $(this).data('tGrid');
                            expandFirstRow(grid, e.row);
                        }
                        
                        function onDataBinding(e) {
                            //e.data = $.extend(e.data, { tripId : tripId });
                        }
                        
                     </script>
                

/////Controller

[HttpPost]
        [GridAction]
        public ActionResult View(ItineraryModel model, string Filter)
        {
            if (ItineraryData.TripViewModelList != null)
                ViewData["TripViewModelData"] = ItineraryData.TripViewModelList.ToList(); 


            return View();
        }


        [HttpPost]
        [GridAction]
        [MultipleSubmitButton(MatchFormKey = "btnSearch", MatchFormValue = "Search")]
        public ActionResult Search(ItineraryModel model, string Filter)
        {
            try
            {
                if (model.TripNamesList == null)
                    model.TripNamesList = ItineraryData.TripNamesList;


                if (model.UserList == null)
                    model.UserList = ItineraryData.UserList;


                if (model.StatusList == null)
                    model.StatusList = ItineraryData.StatusList();


                model = SetCurrentOrPastTrips(model);


                ITripService tripServiceProxy = (ITripService)ServiceLocator.GetInstance().GetService(ServiceLocator.ServiceId.TripService);
                
                //Get logged in User
                User loggedInUser = WebUtils.GetUser(ControllerContext.HttpContext);


                TripFilterRequest tripFilterRequest = GenerateFilterRequest(model, Filter);
                model.DetailedTripsList = tripServiceProxy.GetDetailedTrips(loggedInUser, tripFilterRequest).Cast<TravelOption>().ToList();


                IEnumerable<TripViewModel> trips = PopulateCurrentPastTrips(model);


                ItineraryData.TripViewModelList = trips;


                ViewData["TripViewModelData"] = trips.ToList();
                
                IEnumerable<TripDetailsViewModel> tripDetails = PopulateCurrentPastTripChildDetails(model);


                ViewData["TripDetailsViewModelData"] = tripDetails.ToList();


                return View(model);
            }
            catch (Exception ex)
            {
                LogWriter.WriteLog(ex.Message, LogLevel.ERROR, ex);
            }
            finally
            {
            }
            return null;
        }


        public ActionResult List(ItineraryModel model)
        {
            try
            {
                model = SetCurrentOrPastTrips(model);


                //populate TripName dropdown
                ITripService tripServiceProxy = (ITripService)ServiceLocator.GetInstance().GetService(ServiceLocator.ServiceId.TripService);
                List<TravelOption> travelOptionList = tripServiceProxy.GetTrips(TravelStatus.None, TripType.Air, new DateTime(1900, 1, 1), 1).Cast<TravelOption>().ToList();
                model.TripNamesList = from t in travelOptionList
                                      select new SelectListItem
                                      {
                                          Selected = (t.Id == 1),
                                          Value = t.Id.ToString(),
                                          Text = t.Name
                                      };
                //Get logged in User
                User loggedInUser = WebUtils.GetUser(ControllerContext.HttpContext);


                loggedInUser.Id = 1; //for testing purpose
                loggedInUser.Company.Id = 1; //for testing purpose


                IUserService userServiceProxy = (IUserService)ServiceLocator.GetInstance().GetService(ServiceLocator.ServiceId.UserService);
                List<User> userList = userServiceProxy.GetAllArrangees(loggedInUser);
                model.UserList = from u in userList
                                 select new SelectListItem
                                 {
                                     Selected = (u.Id == 1),
                                     Value = u.Id.ToString(),
                                     Text = u.FirstName + " " + u.LastName
                                 };


                ItineraryData.UserList = model.UserList;


                //populate Status dropdown
                model.StatusList = ItineraryData.StatusList();


                TripFilterRequest tripFilterRequest = GenerateFilterRequest(model, "DepartureDate");                
                model.DetailedTripsList = tripServiceProxy.GetDetailedTrips(loggedInUser, tripFilterRequest).Cast<TravelOption>().ToList();


                IEnumerable<TripViewModel> trips = PopulateCurrentPastTrips(model);


                ViewData["TripViewModelData"] = trips.ToList();


                IEnumerable<TripDetailsViewModel> tripDetails = PopulateCurrentPastTripChildDetails(model);


                ViewData["TripDetailsViewModelData"] = tripDetails.ToList();
            }
            catch (Exception ex)
            {
                LogWriter.WriteLog(ex.Message, LogLevel.ERROR, ex);
            }
            finally
            {


            }
            return View(model);
        }
Tags
Grid
Asked by
Vivek
Top achievements
Rank 1
Share this question
or