This question is locked. New answers and comments are not allowed.
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);
}
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);
}