AfterCheckAllClick fires RowSelect for every row, how do I prevent this?

  1. #1

    AfterCheckAllClick fires RowSelect for every row, how do I prevent this?

    My problem is the code runs All_Checked if I select all, but then it fires Row_Checked for each row. How do I configure this so check all is clicked but does not trigger the individual row handlers?

    <ext:CheckboxSelectionModel runat="server" HideCheckAll="False">
               <DirectEvents>
                                    <AfterCheckAllClick OnEvent="All_Checked" />
                                    <RowSelect OnEvent="Row_Checked">
                                        <ExtraParams>
                                            <ext:Parameter Name="row" Mode="Raw" Value="rowIndex" />
                                        </ExtraParams>
                                    </RowSelect>
                                    <RowDeselect OnEvent="Row_UnChecked">
                                        <ExtraParams>
                                            <ext:Parameter Name="row" Mode="Raw" Value="rowIndex" />
                                        </ExtraParams>
                                    </RowDeselect >
                                </DirectEvents>
                            </ext:CheckboxSelectionModel>
    Last edited by chearner; Apr 05, 2012 at 6:43 PM.
  2. #2
    Hi,

    I can suggest to override the onHdMouseDown handler.

    Example
    <%@ 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)
            {
                Store store = this.GridPanel1.GetStore();
                store.DataSource = new object[] 
                { 
                    new object[] { "test1", "test2", "test3" },
                    new object[] { "test4", "test5", "test6" },
                    new object[] { "test7", "test8", "test9" },
                };
                store.DataBind();
            }
        }
    
        protected void RowSelected(object sender, DirectEventArgs e)
        {
            X.Msg.Alert("RowSelected", "RowSelected").Show();
        }
    
        protected void RowDeselected(object sender, DirectEventArgs e)
        {
            X.Msg.Alert("RowDeselected", "RowDeselected").Show();
        }
    </script>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Ext.NET Example</title>
    
        <script type="text/javascript">
            var myOnHdMouseDown = function (e, t) {
                if (t.className === "x-grid3-hd-checker") {
                    e.stopEvent();
                    var hd = Ext.fly(t.parentNode);
                    var isChecked = hd.hasClass("x-grid3-hd-checker-on");
    
                    if (this.fireEvent("beforecheckallclick", this, isChecked) === false) {
                        return;
                    }
    
                    this.suspendEvents();
                    if (isChecked) {
                        hd.removeClass("x-grid3-hd-checker-on");
                        this.clearSelections();
                    } else {
                        hd.addClass("x-grid3-hd-checker-on");
                        this.selectAll();
                    }
                    this.resumeEvents();
    
    
                    this.fireEvent("aftercheckallclick", this, !isChecked);
                }
            };
        </script>
    </head>
    <body>
        <ext:ResourceManager runat="server" />
        <ext:GridPanel ID="GridPanel1" runat="server" AutoHeight="true">
            <Store>
                <ext:Store runat="server">
                    <Reader>
                        <ext:ArrayReader>
                            <Fields>
                                <ext:RecordField Name="test1" />
                                <ext:RecordField Name="test2" />
                                <ext:RecordField Name="test3" />
                            </Fields>
                        </ext:ArrayReader>
                    </Reader>
                </ext:Store>
            </Store>
            <ColumnModel runat="server">
                <Columns>
                    <ext:Column Header="Test1" DataIndex="test1" />
                    <ext:Column Header="Test2" DataIndex="test2" />
                    <ext:Column Header="Test3" DataIndex="test3" />
                </Columns>
            </ColumnModel>
            <SelectionModel>
                <ext:CheckboxSelectionModel runat="server">
                    <CustomConfig>
                        <ext:ConfigItem Name="onHdMouseDown" Value="myOnHdMouseDown" Mode="Raw" />
                    </CustomConfig>
                    <DirectEvents>
                        <RowSelect OnEvent="RowSelected" />
                        <RowDeselect OnEvent="RowDeselected" />
                    </DirectEvents>
                </ext:CheckboxSelectionModel>
            </SelectionModel>
        </ext:GridPanel>
    </body>
    </html>
  3. #3
    I added this line back to the directevents, I believe you left it out of your example.
    <AfterCheckAllClick OnEvent="All_Checked" />
    The problem, in the All_Checked handler, is rowselectiommodel has no selected rows now...count = 0
    RowSelectionModel rsm = this.grdRenewal.SelectionModel.Primary as RowSelectionModel;
    I would like my code to do one handler when All is checked -OR- one handler when a single row is checked. They way AfterCheckAllClick DirectEvent works, the All event and the Single row events (each row) are all called.
  4. #4
    Confirmed.

    I can suggest the following solution.

    Example
    <%@ 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)
            {
                Store store = this.GridPanel1.GetStore();
                store.DataSource = new object[] 
                { 
                    new object[] { "test1", "test2", "test3" },
                    new object[] { "test4", "test5", "test6" },
                    new object[] { "test7", "test8", "test9" },
                };
                store.DataBind();
            }
        }
     
        protected void RowSelected(object sender, DirectEventArgs e)
        {
            X.Msg.Alert("RowSelected", "RowSelected").Show();
        }
     
        protected void RowDeselected(object sender, DirectEventArgs e)
        {
            X.Msg.Alert("RowDeselected", "RowDeselected").Show();
        }
    
        protected void AfterCheckAllClick(object sender, DirectEventArgs e)
        {
            RowSelectionModel sm = sender as RowSelectionModel;
            X.Msg.Alert("AfterCheckAllClick", sm.SelectedRows.Count).Show();
        }
    </script>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Ext.NET Example</title>
    </head>
    <body>
        <form runat="server">
            <ext:ResourceManager runat="server" />
            <ext:GridPanel ID="GridPanel1" runat="server" AutoHeight="true">
                <Store>
                    <ext:Store runat="server">
                        <Reader>
                            <ext:ArrayReader>
                                <Fields>
                                    <ext:RecordField Name="test1" />
                                    <ext:RecordField Name="test2" />
                                    <ext:RecordField Name="test3" />
                                </Fields>
                            </ext:ArrayReader>
                        </Reader>
                    </ext:Store>
                </Store>
                <ColumnModel runat="server">
                    <Columns>
                        <ext:Column Header="Test1" DataIndex="test1" />
                        <ext:Column Header="Test2" DataIndex="test2" />
                        <ext:Column Header="Test3" DataIndex="test3" />
                    </Columns>
                </ColumnModel>
                <SelectionModel>
                    <ext:CheckboxSelectionModel runat="server">
                        <Listeners>
                            <BeforeCheckAllClick Handler="this.lockEvents = true;" />
                            <AfterCheckAllClick Handler="this.lockEvents = false;" Delay="250" />
                        </Listeners>
                        <DirectEvents>
                            <RowSelect OnEvent="RowSelected" Before="return !this.lockEvents;" />
                            <RowDeselect OnEvent="RowDeselected" Before="return !this.lockEvents;" />
                            <AfterCheckAllClick OnEvent="AfterCheckAllClick" />
                        </DirectEvents>
                    </ext:CheckboxSelectionModel>
                </SelectionModel>
            </ext:GridPanel>
        </form>
    </body>
    </html>
  5. #5
    That worked, thanks.

Similar Threads

  1. [CLOSED] GridPanel RowSelect event fires twice
    By vadym.f in forum 1.x Legacy Premium Help
    Replies: 4
    Last Post: Jul 17, 2012, 1:30 PM
  2. Replies: 4
    Last Post: Jan 23, 2012, 11:31 AM
  3. [CLOSED] ComboBox fires Select DirectEvent twice
    By jmcantrell in forum 1.x Legacy Premium Help
    Replies: 5
    Last Post: May 05, 2011, 9:52 AM
  4. [CLOSED] [1.0] SelectBox Select event fires twice
    By randy85253 in forum 1.x Legacy Premium Help
    Replies: 1
    Last Post: Dec 09, 2009, 2:20 PM
  5. ValidateEdit Fires even if value is unmodified
    By nanosassa in forum 1.x Help
    Replies: 1
    Last Post: Aug 24, 2009, 1:18 PM

Tags for this Thread

Posting Permissions