GridPanel - Selection only from current Page

  1. #1

    GridPanel - Selection only from current Page

    Hi,

    I'm having a GridPanel on my Page that supports paging. I also bind a RowSelectionModel of Mode "Multi".

    When I go to another page, e.g. page #3, I still get "all selected rows" even from page no. 1 that is not visible anymore. How can I fix this to submit only selected rows from the CURRENT PAGE?

    ( I wan't this to work in code behind. )

    Complete example:

    ASPX-Page:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GridSelectionModel_CodeChangedByMS_MinExample.aspx.cs" 
    Inherits="WebApplication2extnet.GridSelectionModel_CodeChangedByMS_MinExample" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <!DOCTYPE html>
    <html>
    <head id="Head1" runat="server">
        <title>Row Selection Model</title>
    </head>
    <body>
        <form id="Form1" runat="server">
        <ext:ResourceManager ID="ResourceManager1" runat="server" />
        <ext:Store ID="Store1" runat="server" PageSize="5">
            <Model>
                <ext:Model ID="Model1" runat="server" IDProperty="InternalID">
                    <Fields>
                        <ext:ModelField Name="InternalID" />
                        <ext:ModelField Name="Loginname" />
                        <ext:ModelField Name="Forename" />
                        <ext:ModelField Name="Lastname" />
                        <ext:ModelField Name="UsergroupName" />
                    </Fields>
                </ext:Model>
            </Model>
        </ext:Store>
        <ext:GridPanel ID="GridPanel1" runat="server" StoreID="Store1" Title="Company List"
            Collapsible="true" Width="600" Height="350">
            <DirectEvents>
                <ItemClick OnEvent="NoticeGridClick">
                    <ExtraParams>
                        <ext:Parameter runat="server" Name="ClickedLoginname" Value="item.getStore().data.items[index].data.Loginname"
                            Mode="Raw" />
                        <ext:Parameter runat="server" Name="ClickedRowIndex" Value="index" Mode="Raw" />
                        <ext:Parameter runat="server" Name="Values" Value="Ext.encode(#{GridPanel1}.getRowsValues({selectedOnly:true}))"
                            Mode="Raw" />
                    </ExtraParams>
                </ItemClick>
            </DirectEvents>
            <ColumnModel ID="ColumnModel1" runat="server">
                <Columns>
                    <ext:Column ID="Column1" runat="server" Text="Loginname" DataIndex="Loginname"
                        Flex="1" />
                    <ext:Column ID="Column2" runat="server" Text="Forename" DataIndex="Forename" Width="75" />
                    <ext:Column ID="Column3" runat="server" Text="Lastname" DataIndex="Lastname" Width="75" />
                    <ext:Column ID="Column4" runat="server" Text="Group" DataIndex="UsergroupName" Width="75" />
                </Columns>
            </ColumnModel>
            <Features>
                <ext:GridFilters ID="GridFilters1" runat="server" Local="true">
                    <Filters>
                        <ext:StringFilter DataIndex="Forename" />
                    </Filters>
                </ext:GridFilters>
            </Features>
            <SelectionModel>
                <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" Mode="Multi" />
            </SelectionModel>
            <Buttons>
                <ext:Button ID="ButtonSubmit" runat="server" Text="Submit">
                    <DirectEvents>
                        <Click OnEvent="ButtonSubmit_Click" />
                    </DirectEvents>
                </ext:Button>
                <ext:Button ID="Button2" runat="server" Text="Submit with values">
                    <DirectEvents>
                        <Click OnEvent="SubmitSelection">
                            <ExtraParams>
                                <ext:Parameter Name="Values" Value="Ext.encode(#{GridPanel1}.getRowsValues({selectedOnly:true}))"
                                    Mode="Raw" />
                            </ExtraParams>
                        </Click>
                    </DirectEvents>
                </ext:Button>
                <ext:Button ID="ButtonClear" runat="server" Text="Clear">
                    <DirectEvents>
                        <Click OnEvent="Clear_Click" />
                    </DirectEvents>
                </ext:Button>
                <ext:Button ID="ButtonAdd" runat="server" Text="Add 'ID==11' to selection ">
                    <DirectEvents>
                        <Click OnEvent="Add_Click" />
                    </DirectEvents>
                </ext:Button>
            </Buttons>
            <BottomBar>
                <ext:PagingToolbar ID="PagingToolbar1" runat="server" />
            </BottomBar>
        </ext:GridPanel>
        <div style="width: 590px; border: 1px solid gray; padding: 5px;">
            <ext:Label ID="Label1" runat="server" />
        </div>
        </form>
    </body>
    </html>
    Code-behind:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Text;
    using Ext.Net;
    
    namespace WebApplication2extnet
    {
        /// <summary>
        /// Instances of this class are displayed in the grid
        /// </summary>
        public class PortalUserX
        {
            public PortalUserX(string loginname, long internalid, string forename, 
                string lastname, string usergroupname)
            {
                this.InternalID = internalid;
                this.Loginname = loginname;
                this.Forename = forename;
                this.Lastname = lastname;
                this.UsergroupName = usergroupname;
            }
    
            public PortalUserX()
            {
            }
    
            public string Loginname { get; set; }
            public long InternalID { get; set; }
            public string Forename { get; set; }
            public string Lastname { get; set; }
            public string UsergroupName { get; set; }
        }
    
        public partial class GridSelectionModel_CodeChangedByMS_MinExample : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                // fill store once
                this.Store1.DataSource = new List<PortalUserX> 
    			{ 
    				new PortalUserX("testuser03", 3, "Test03", "User03", "Admin"),
    				new PortalUserX("testuser05", 5, "Test05", "User05", "Admin"),
    				new PortalUserX("testuser11", 11, "Test11", "User11", "Gast (R)"),
    				new PortalUserX("testuser12", 12, "Test12", "User12", "Gast (R)"),
    				new PortalUserX("testuser13", 13, "Test13", "User13", "Gast (R)"),
    				new PortalUserX("testuser14", 14, "Test14", "User14", "Gast (RW)"),
    				new PortalUserX("testuser15", 15, "Test15", "User15", "Gast (RW)"),
    				new PortalUserX("testuser16", 16, "Test16", "User16", "Gast (RW)"),
    				new PortalUserX("testuser17", 17, "Test17", "User17", "Gast (RW)"),
    				new PortalUserX("testuser18", 18, "Test18", "User18", "Gast (RW)"),
    				new PortalUserX("testuser19", 19, "Test19", "User19", "Gast (RW)"),
    				new PortalUserX("testuser101", 101, "Test101", "User101", "Gast (R)"),
    				new PortalUserX("testuser102", 102, "Test102", "User102", "Gast (R)"),
    				new PortalUserX("testuser103", 103, "Test103", "User103", "Gast (R)"),
    				new PortalUserX("testuser104", 104, "Test104", "User104", "Gast (RW)"),
    				new PortalUserX("testuser105", 105, "Test105", "User105", "Gast (RW)"),
    				new PortalUserX("testuser106", 106, "Test106", "User106", "Gast (RW)"),
    				new PortalUserX("testuser107", 107, "Test107", "User107", "Gast (RW)"),
    				new PortalUserX("testuser108", 108, "Test108", "User108", "Gast (RW)"),
    				new PortalUserX("testuser109", 109, "Test109", "User109", "Gast (RW)"),
    			};
    
                // bind store once
                if (!X.IsAjaxRequest)
                {
                    this.Store1.DataBind();
                    RowSelectionModel sm = this.GridPanel1.GetSelectionModel() as RowSelectionModel;
                    sm.SelectedRows.Add(new SelectedRow(1));    // selects where  rowindex == 1
                    sm.SelectedRows.Add(new SelectedRow("16")); // selects where  recordID == "16"
                }
            }
    
            protected void NoticeGridClick(object sender, DirectEventArgs e)
            {
                string userloginname = e.ExtraParams["ClickedLoginname"];
                string index = e.ExtraParams["ClickedRowIndex"];
                string json = e.ExtraParams["Values"];
                int jsonl = json.Length;
                Dictionary<string, string>[] selectedusers = JSON.Deserialize<Dictionary<string, string>[]>(json);
                int users = selectedusers.Length;
            }
    
            protected void Clear_Click(object sender, DirectEventArgs e)
            {
                RowSelectionModel selectionmodel = this.GridPanel1.GetSelectionModel() as RowSelectionModel;
                selectionmodel.ClearSelection();
            }
    
            protected void Add_Click(object sender, DirectEventArgs e)
            {
                RowSelectionModel selectionmodel = this.GridPanel1.GetSelectionModel() as RowSelectionModel;
                selectionmodel.SelectedRows.Add(new SelectedRow("11"));
                selectionmodel.UpdateSelection();
            }
    
            protected void ButtonSubmit_Click(object sender, DirectEventArgs e)
            {
                RowSelectionModel selectionmodel = this.GridPanel1.GetSelectionModel() as RowSelectionModel;
                StringBuilder sb = new StringBuilder();
                
                foreach (SelectedRow row in selectionmodel.SelectedRows)
                {
                    sb.AppendFormat("RecordID: {0}&nbsp;&nbsp;&nbsp;&nbsp;Row index: {1}<br/>", row.RecordID, row.RowIndex);
                }
    
                this.Label1.Html = sb.ToString();
            }
    
            protected void SubmitSelection(object sender, DirectEventArgs e)
            {
                string json = e.ExtraParams["Values"];
    
                Dictionary<string, string>[] companies = JSON.Deserialize<Dictionary<string, string>[]>(json);
                StringBuilder sb = new StringBuilder();
                sb.Append("<table  cellspacing='15'>");
                bool addHeader = true;
    
                foreach (Dictionary<string, string> row in companies)
                {
                    if (addHeader)
                    {
                        sb.Append("<tr>");
                        foreach (KeyValuePair<string, string> keyValuePair in row)
                        {
                            sb.Append("<td style='white-space:nowrap;font-weight:bold;padding:5px;'>");
                            sb.Append(keyValuePair.Key);
                            sb.Append("</td>");
                        }
                        sb.Append("</tr>");
                        addHeader = false;
                    }
                    sb.Append("<tr>");
                    foreach (KeyValuePair<string, string> keyValuePair in row)
                    {
                        sb.Append("<td style='white-space:nowrap;padding:5px;'>");
                        sb.Append(keyValuePair.Value);
                        sb.Append("</td>");
                    }
                    sb.Append("</tr>");
                }
                sb.Append("</table>");
                this.Label1.Html = sb.ToString();
            }
    
        }
    }
    Attached Thumbnails Click image for larger version. 

Name:	screen1.png 
Views:	10 
Size:	20.5 KB 
ID:	7446   Click image for larger version. 

Name:	screen2.png 
Views:	9 
Size:	21.0 KB 
ID:	7447  
  2. #2
    Try to set SelectionMemory="false" for grid panel
  3. #3
    Thanks a lot !!

    That's exactly what I was looking for :)

Similar Threads

  1. [CLOSED] Get Current Page index in code behind
    By speedstepmem4 in forum 2.x Legacy Premium Help
    Replies: 4
    Last Post: Feb 12, 2014, 7:52 PM
  2. [CLOSED] How to add custom style to the current page dynamically?
    By gltech in forum 2.x Legacy Premium Help
    Replies: 1
    Last Post: May 28, 2013, 6:37 AM
  3. How to close current tab(page)?
    By HzA in forum 1.x Help
    Replies: 7
    Last Post: Feb 21, 2013, 11:55 AM
  4. Open form without leaving current page
    By Joffre Mota in forum 1.x Help
    Replies: 2
    Last Post: Jul 30, 2011, 8:38 PM
  5. Export only exporting what is in current page
    By rthiney in forum 1.x Help
    Replies: 1
    Last Post: Oct 13, 2009, 3:32 PM

Tags for this Thread

Posting Permissions