I have handled this as follows.
- Added a temporary store "SelectedRowStore" to maintain the selected rows in GridPanel1
- Added Listners On "Select" and "DeSelect" of GridPanel1 to Add and Remove selected row to above temporary store
- On FIlterUpdate Event of GridFilters given a call to user defined function "SelectRow" to Mark previously selected rows
If any one comes across the same situation following is the working sample code...
<%@ Page Language="C#" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
this.Store1.DataSource = this.TestData(5000);
this.Store1.DataBind();
}
}
private object[] TestData(int count)
{
string[] firstNames = new string[] { "Russel", "Clark", "Steve", "Sam", "Lance", "Robert", "Sean", "David", "Justin", "Nicolas", "Brent" };
string[] lastNames = new string[] { "Wood", "Lewis", "Scott", "Parker", "Ross", "Garcia", "Bell", "Kelly", "Powell", "Moore", "Cook" };
int[] ratings = new int[] { 1, 2, 3, 4, 5 };
int[] salaries = new int[] { 100, 400, 900, 1500, 1000000 };
object[] data = new object[count];
Random rnd = new Random();
for (int i = 0; i < count; i++)
{
int ratingId = rnd.Next(ratings.Length);
int salaryId = rnd.Next(salaries.Length);
int firstNameId = rnd.Next(firstNames.Length);
int lastNameId = rnd.Next(lastNames.Length);
int rating = ratings[ratingId];
int salary = salaries[salaryId];
string name = String.Format("{0} {1}", firstNames[firstNameId], lastNames[lastNameId]);
string myid = "rec-" + i;
data[i] = new object[] { myid, name, rating, salary };
}
return data;
}
</script>
<!DOCTYPE html>
<html>
<head id="Head1" runat="server">
<title>Buffered Scrolling - Ext.NET Examples</title>
<link href="/resources/css/examples.css" rel="stylesheet" />
<script>
var jumpToRow = function() {
var me = this,
field = me.up('toolbar').down('#gotoLine');
if (field.isValid()) {
me.up('grid').view.bufferedRenderer.scrollTo(field.getValue() - 1, true);
}
};
// Added Following Code
var AddRowToTempStore = function(s, record) {
s.insert(0, record);
};
var RemoveRowFromTempStore = function(s, record) {
s.remove(record);
};
var SelectRows = function(s, grid) {
var r = [];
s.each(function(record) {
r.push(record);
});
grid.selModel.select(r, true);
};
//
</script>
</head>
<body>
<form id="Form1" runat="server">
<ext:ResourceManager ID="ResourceManager1" runat="server" />
<h1>
Buffered Scrolling</h1>
<p>
Ext.Net 2's brand new grid supports infinite scrolling, which enables you to load
any number of records into a grid without paging.</p>
<p>
The new grid uses a virtualized scrolling system to handle potentially infinite
data sets without any impact on client side performance.</p>
<p>
This example illustrates loading of all the records up front and buffering the rendering.</p>
<ext:GridPanel ID="GridPanel1" runat="server" Title="Buffered Grid of 5,000 random records"
Width="700" Height="500" SelectionMemory="true">
<Store>
<ext:Store ID="Store1" runat="server">
<Model>
<ext:Model ID="Model1" runat="server" IDProperty="myid">
<Fields>
<ext:ModelField Name="myid" />
<ext:ModelField Name="name" />
<ext:ModelField Name="rating" Type="Int" />
<ext:ModelField Name="salary" Type="Float" />
</Fields>
</ext:Model>
</Model>
</ext:Store>
</Store>
<Plugins>
<ext:BufferedRenderer ID="BufferedRenderer1" runat="server" />
</Plugins>
<View>
<ext:GridView ID="GridView1" runat="server" TrackOver="false" />
</View>
<SelectionModel>
<ext:CheckboxSelectionModel ID="CheckboxSelectionModel1" runat="server" Mode="Simple">
<%-- Added Following Code--%>
<Listeners>
<Select Handler="AddRowToTempStore(#{SelectedRowStore},#{GridPanel1}.selModel.getSelection());" />
<Deselect Handler="RemoveRowFromTempStore(#{SelectedRowStore},record);" />
</Listeners>
<%--End --%>
</ext:CheckboxSelectionModel>
</SelectionModel>
<ColumnModel ID="ColumnModel1" runat="server">
<Columns>
<%--<ext:RowNumbererColumn ID="RowNumbererColumn1" runat="server" Width="40" Sortable="false" />--%>
<ext:Column ID="Column4" runat="server" Text="Name" Flex="1" DataIndex="myid" />
<ext:Column ID="Column1" runat="server" Text="Name" Flex="1" DataIndex="name" />
<ext:Column ID="Column2" runat="server" Text="Rating" Width="125" DataIndex="rating" />
<ext:Column ID="Column3" runat="server" Text="Salary" Width="125" DataIndex="salary"
Align="Right">
<Renderer Format="UsMoney" />
</ext:Column>
</Columns>
</ColumnModel>
<BottomBar>
<ext:Toolbar ID="Toolbar1" runat="server">
<Items>
<ext:NumberField ID="NumberField1" runat="server" LabelWidth="70" FieldLabel="Jump to row"
MinValue="1" MaxValue="5000" AllowDecimals="false" EnableKeyEvents="true" ItemID="gotoLine">
<Listeners>
<SpecialKey Handler="if (e.getKey() === e.ENTER) { jumpToRow.call(this); }" />
</Listeners>
</ext:NumberField>
<ext:Button ID="Button1" runat="server" Text="Go">
<Listeners>
<Click Fn="jumpToRow" />
</Listeners>
</ext:Button>
</Items>
</ext:Toolbar>
</BottomBar>
<Features>
<ext:GridFilters runat="server" ID="GridFilters1" Local="true">
<Filters>
<ext:StringFilter DataIndex="name" />
<ext:NumericFilter DataIndex="rating" />
<ext:NumericFilter DataIndex="salary" />
</Filters>
<%-- Added Following Code--%>
<Listeners>
<FilterUpdate Handler="SelectRows(#{SelectedRowStore},#{GridPanel1})" />
</Listeners>
<%--End --%>
</ext:GridFilters>
</Features>
</ext:GridPanel>
<%-- Added Following Code--%>
<ext:Store ID="SelectedRowStore" runat="server">
<Model>
<ext:Model ID="Model2" runat="server" IDProperty="myid">
<Fields>
<ext:ModelField Name="myid">
</ext:ModelField>
</Fields>
</ext:Model>
</Model>
</ext:Store>
<%--End --%>
</form>
</body>
</html>
You may mark this thread as closed. Thanks for the support.
Thanks & BR,
PRASAD