Hi,
I have a programatically created RadGrid with custom paging enabled, which works fine. However the grid also has filtering enabled, and when a user changes the filter values the pages at the bottom reflect the number of pages before filtering - so essentially I need to somehow set the VirtualItemCount with the correct number of rows.
How would I do this?
I have a programatically created RadGrid with custom paging enabled, which works fine. However the grid also has filtering enabled, and when a user changes the filter values the pages at the bottom reflect the number of pages before filtering - so essentially I need to somehow set the VirtualItemCount with the correct number of rows.
How would I do this?
6 Answers, 1 is accepted
0
Hello Chris,
In order to give you a precise suggestion on how to resolve the problem I would like to know what type of data source are you using. Could you please show us some code samples? Once we get a better understanding over the implementation we would be able to give you a more straight to the point answer.
Kind regards,
Angel Petrov
the Telerik team
In order to give you a precise suggestion on how to resolve the problem I would like to know what type of data source are you using. Could you please show us some code samples? Once we get a better understanding over the implementation we would be able to give you a more straight to the point answer.
Kind regards,
Angel Petrov
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
0
Chris
Top achievements
Rank 1
answered on 22 Mar 2013, 03:32 PM
No problem, here's my code:
private
RadGrid gvProductRange {
get
{
return
(RadGrid)plcProductRange.FindControl(
"gvProductRange"
); } }<br> <br>
protected
void
Page_Init(
object
sender, EventArgs e)
{
DefineStructure();
}
private
void
DefineStructure()
{
WDBDataContext dc =
new
WDBDataContext();
RadGrid gvProductRangeTmp =
new
RadGrid();
gvProductRangeTmp.ID =
"gvProductRange"
;
gvProductRangeTmp.DataBound += gvProductRange_DataBound;
gvProductRangeTmp.ItemDataBound += gvProductRange_ItemDataBound;
gvProductRangeTmp.NeedDataSource += gvProductRange_NeedDataSource;
gvProductRangeTmp.AllowCustomPaging =
true
;
gvProductRangeTmp.AllowFilteringByColumn =
true
;
gvProductRangeTmp.AllowPaging =
true
;
gvProductRangeTmp.AllowSorting =
true
;
gvProductRangeTmp.AutoGenerateColumns =
false
;
gvProductRangeTmp.PageSize = 50;
gvProductRangeTmp.MasterTableView.AllowCustomPaging =
true
;
gvProductRangeTmp.MasterTableView.AllowSorting =
true
;
gvProductRangeTmp.MasterTableView.AllowPaging =
true
;
gvProductRangeTmp.MasterTableView.AllowFilteringByColumn =
true
;
gvProductRangeTmp.MasterTableView.PageSize = 50;
gvProductRangeTmp.GroupingSettings.CaseSensitive =
false
;
gvProductRangeTmp.Columns.Add(
new
GridBoundColumn() { UniqueName =
"ProductRange"
, HeaderText =
"Product Range"
, AutoPostBackOnFilter =
true
, DataField =
"ProductRange"
, AllowFiltering =
true
});
gvProductRangeTmp.Columns.Add(
new
GridBoundColumn() { UniqueName =
"Product"
, HeaderText =
"Product"
, AutoPostBackOnFilter =
true
, DataField =
"Product"
, AllowFiltering =
true
});
gvProductRangeTmp.Columns.Add(
new
GridBoundColumn() { UniqueName =
"ProductType"
, HeaderText =
"Product Type"
, AutoPostBackOnFilter =
true
, DataField =
"ProductType"
, AllowFiltering =
true
});
gvProductRangeTmp.Columns.Add(
new
GridBoundColumn() { UniqueName =
"Dimensions"
, HeaderText =
"Dimensions"
, AutoPostBackOnFilter =
true
, DataField =
"Dimensions"
, AllowFiltering =
true
});
gvProductRangeTmp.Columns.Add(
new
GridBoundColumn() { UniqueName =
"Material"
, HeaderText =
"Material"
, AutoPostBackOnFilter =
true
, DataField =
"Material"
, AllowFiltering =
true
});
gvProductRangeTmp.Columns.Add(
new
GridNumericColumn() { UniqueName =
"TradePrice"
, HeaderText =
"Trade Price"
, AutoPostBackOnFilter =
true
, DataField =
"TradePrice"
, FilterControlWidth = Unit.Pixel(50), DataFormatString =
"{0:c}"
, AllowFiltering =
true
, NumericType = NumericType.Currency });
List<Wholesaler> wholesalerList = dc.Wholesalers.ToList();
foreach
(Wholesaler wholesaler
in
wholesalerList)
{
gvProductRangeTmp.Columns.Add(
new
GridNumericColumn() { UniqueName = wholesaler.ID.ToString(), AllowFiltering =
false
, NumericType = Telerik.Web.UI.NumericType.Currency, HeaderText = wholesaler.Name, DataField = wholesaler.ID.ToString(), DataFormatString =
"{0:c}"
});
}
plcProductRange.Controls.Add(gvProductRangeTmp);
}
private
DataTable BindGrid(
int
startIndex,
int
pageSize)
{
DataTable dt =
new
DataTable();
dt.Columns.Add(
"ProductRange"
,
typeof
(
string
));
dt.Columns.Add(
"Product"
,
typeof
(
string
));
dt.Columns.Add(
"ProductType"
,
typeof
(
string
));
dt.Columns.Add(
"Dimensions"
,
typeof
(
string
));
dt.Columns.Add(
"Material"
,
typeof
(
string
));
dt.Columns.Add(
"TradePrice"
,
typeof
(
decimal
));
//Long code to get data here
return dt;
}
protected void gvProductRange_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
if (Session["ActiveRevision"] != null)
{
WDBDataContext dc = new WDBDataContext();
int startRowIndex = gvProductRange.CurrentPageIndex * gvProductRange.PageSize;
int maxRows = gvProductRange.PageSize;
DataTable dt = BindGrid(startRowIndex, maxRows);
gvProductRange.VirtualItemCount = dc.Luc_ItemDetails.Count();
gvProductRange.MasterTableView.VirtualItemCount = gvProductRange.VirtualItemCount;
gvProductRange.DataSource = dt;
}
}
0
Hello Chris,
Thank you for providing a code samples. Since you are using advanced data binding I suggest that you apply the filtering on a data level. Is this applicable in your case? Can you modify your logic so that it returns a filtered set of data to which you can later bind the grid?
As for setting the VirtualItemCount you will have to do this in the NeedDataSource event handler. Additionally note that you can use the result returned from the BindGrid method which returns a DataTable. You can get the number of records by calling DataTable.Rows.Count.
I strongly suggest that you review this online demo in which demonstrates a possible resolution of your problem.
All the best,
Angel Petrov
the Telerik team
Thank you for providing a code samples. Since you are using advanced data binding I suggest that you apply the filtering on a data level. Is this applicable in your case? Can you modify your logic so that it returns a filtered set of data to which you can later bind the grid?
As for setting the VirtualItemCount you will have to do this in the NeedDataSource event handler. Additionally note that you can use the result returned from the BindGrid method which returns a DataTable. You can get the number of records by calling DataTable.Rows.Count.
I strongly suggest that you review this online demo in which demonstrates a possible resolution of your problem.
All the best,
Angel Petrov
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
0
Marius
Top achievements
Rank 1
answered on 25 Jun 2017, 09:47 AM
12
0
Marius
Top achievements
Rank 1
answered on 25 Jun 2017, 09:48 AM
0 posta
0
Marius
Top achievements
Rank 1
answered on 25 Jun 2017, 09:50 AM
12345