GridPanel: selectedRow always = null

  1. #1

    GridPanel: selectedRow always = null

    when i click a row, the selectedrow is always null
        
    <head id="Head1" runat="server">
        <title></title>
        <script type="text/javascript">
            var refreshTree = function (tree) {
                App.direct.RefreshMenu({
                    success: function (result) {
                        var nodes = eval(result);
                        if (nodes.length > 0) {
                            tree.setRootNode(nodes[0]);
                        }
                        else {
                            tree.getRootNode().removeAll();
                        }
                    }
                });
            };
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <ext:ResourceManager ID="ResourceManager1" runat="server" />
    <ext:Viewport ID="ViewPort1" runat="server" Layout="BorderLayout">
            <Items>
                <ext:Panel ID="Panel1" runat="server" Split="true" Layout="AccordionLayout" Region="West"
                    Width="300">
                    <LayoutConfig>
                        <ext:AccordionLayoutConfig OriginalHeader="true" />
                    </LayoutConfig>
                    <Items>
                        <ext:GridPanel ID="GridPanelRole" runat="server" Border="false" BodyPadding="6" Title="角色列表">
                            <Store>
                                <ext:Store ID="gvRoleStore" runat="server" RemoteSort="false" OnReadData="gvRoleStore_Refresh"
                                    WarningOnDirty="false">
                                    <Proxy>
                                        <ext:PageProxy />
                                    </Proxy>
                                    <Model>
                                        <ext:Model runat="server" IDProperty="Role_RoleId">
                                            <Fields>
                                                <ext:ModelField Name="Role_RoleId" />
                                                <ext:ModelField Name="Role_Code" />
                                                <ext:ModelField Name="Role_FullName" />
                                            </Fields>
                                        </ext:Model>
                                    </Model>
                                </ext:Store>
                            </Store>
                            <ColumnModel ID="ColumnModel4" runat="server">
                                <Columns>
                                    <ext:Column runat="server" Text="角色代码" DataIndex="Role_Code" />
                                    <ext:Column runat="server" Text="角色名称" DataIndex="Role_FullName" />
                                </Columns>
                            </ColumnModel>
                            <SelectionModel>
                                <ext:RowSelectionModel runat="server" Mode="Single">
                                    <Listeners>
                                        <Select Handler="refreshTree(#{ModuleTree});" Delay="1" />
                                    </Listeners>
                                    <DirectEvents>
                                        <Select>
                                            <ExtraParams>
                                                <ext:Parameter Name="Role_RoleId" Value="this.selModel.getSelection().id" Mode="Raw">
                                                </ext:Parameter>
                                            </ExtraParams>
                                        </Select>
                                    </DirectEvents>
                                </ext:RowSelectionModel>
                            </SelectionModel>
                            <TopBar>
                                <ext:Toolbar ID="Toolbar3" runat="server">
                                    <Items>
                                        <ext:TextField ID="txtRoleName" LabelAlign="Left" LabelWidth="50" FieldLabel="角色"
                                            runat="server">
                                        </ext:TextField>
                                        <ext:Button ID="btnRoleSearch" runat="server" Text="查询" Icon="Find">
                                            <Listeners>
                                                <Click Handler="#{gvRoleStore}.reload();" />
                                            </Listeners>
                                        </ext:Button>
                                    </Items>
                                </ext:Toolbar>
                            </TopBar>
                        </ext:GridPanel>
                        <ext:GridPanel ID="gpUserGridPanel" runat="server" Border="false" BodyPadding="6"
                            Title="用户列表" Icon="ApplicationViewColumns" TrackMouseOver="false">
                            <Store>
                                <ext:Store ID="StoreUser" runat="server" RemoteSort="false" OnReadData="gvUserStore_Refresh"
                                    WarningOnDirty="false">
                                    <Proxy>
                                        <ext:PageProxy />
                                    </Proxy>
                                    <Model>
                                        <ext:Model runat="server" IDProperty="User_UserId">
                                            <Fields>
                                                <ext:ModelField Name="User_LoginName" />
                                                <ext:ModelField Name="User_RealName" />
                                                <ext:ModelField Name="Department_DepartmentName" />
                                            </Fields>
                                        </ext:Model>
                                    </Model>
                                </ext:Store>
                            </Store>
                            <ColumnModel ID="ColumnModel3" runat="server">
                                <Columns>
                                    <ext:RowNumbererColumn runat="server" />
                                    <ext:Column runat="server" Text="用户名" DataIndex="User_LoginName" />
                                    <ext:Column runat="server" Text="姓名" DataIndex="User_RealName" />
                                    <ext:Column runat="server" Text="部门" DataIndex="Department_DepartmentName" />
                                </Columns>
                            </ColumnModel>
                            <SelectionModel>
                                <ext:RowSelectionModel runat="server" Mode="Single">
                                    <Listeners>
                                        <Select Handler="refreshTree(#{ModuleTree});" />
                                    </Listeners>
                                    <DirectEvents>
                                        <Select>
                                            <ExtraParams>
                                                <ext:Parameter Name="User_UserId" Value="this.selModel.getSelection().id" Mode="Raw">
                                                </ext:Parameter>
                                            </ExtraParams>
                                        </Select>
                                    </DirectEvents>
                                </ext:RowSelectionModel>
                            </SelectionModel>
                             <BottomBar>
                                <ext:PagingToolbar ID="PagingToolbarUser" runat="server" PageSize="20" />
                            </BottomBar>
                            <TopBar>
                                <ext:Toolbar ID="Toolbar6" runat="server" Layout="TableLayout">
                                    <LayoutConfig>
                                        <ext:TableLayoutConfig Columns="1" />
                                    </LayoutConfig>
                                    <Items>
                                        <ext:Hidden ID="HiddenDepartmentCode" runat="server" />
                                        <ext:DropDownField ID="DropDownFieldDepartment" runat="server" Editable="false" LabelAlign="Left"
                                            LabelWidth="50" FieldLabel="部门" TriggerIcon="SimpleArrowDown" Width="270" Padding="5">
                                            <Component>
                                                <uc:DepartmentTree ID="DepartmentTree1" runat="server" Height="270">
                                                    <Listeners>
                                                        <ItemClick Handler="this.dropDownField.setValue(record.data.text, false);#{DropDownFieldDepartment}.collapse();#{HiddenDepartmentCode}.setValue(node.attributes.Code);#{StoreUser}.reload();" />
                                                    </Listeners>
                                                </uc:DepartmentTree>
                                            </Component>
                                        </ext:DropDownField>
                                        <ext:TextField ID="txtName" LabelAlign="Left" LabelWidth="50" FieldLabel="用户" Padding="5"
                                            runat="server" EmptyText="请输入用户名" EnableKeyEvents="true">
                                            <Listeners>
                                                <KeyUp Handler="if (this.getRawValue().length >= 3 || e.getKey() == Ext.EventObject.ENTER) {#{gpUserGridPanel}.reload(); } " />
                                            </Listeners>
                                        </ext:TextField>
                                        <ext:Button ID="btnUserSearch" runat="server" Text="查询" Icon="Find">
                                            <Listeners>
                                                <Click Handler="#{StoreUser}.reload();" />
                                            </Listeners>
                                        </ext:Button>
                                    </Items>
                                </ext:Toolbar>
                            </TopBar>
                        </ext:GridPanel>
                    </Items>
            </ext:Panel>
        </ext:Viewport>
        </form>
    </body>
    </html>
                RowSelectionModel smr = this.GridPanelRole.GetSelectionModel() as RowSelectionModel;
                RowSelectionModel smu = this.gpUserGridPanel.GetSelectionModel() as RowSelectionModel;
    
                if (smr.SelectedRow != null)
                {
                    HiddenType.Text = "r";
                }
                else if (smu.SelectedRow != null)
                {
                    HiddenType.Text = "u";
                }
    please give some advices
    Last edited by zhurui124; Mar 27, 2013 at 3:27 AM.
  2. #2
    Hi @zhurui124,

    I can't reproduce with the following test case. Can you?

    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 GetSelectedRow(object sender, DirectEventArgs e)
        {
            X.Msg.Alert("GetSelectedRow", (this.GridPanel1.GetSelectionModel() as RowSelectionModel).SelectedRow.RowIndex).Show();
        }
    </script>
    
    <!DOCTYPE html>
    
    <html>
    <head runat="server">
        <title>Ext.NET v2 Example</title>
    </head>
    <body>
        <form runat="server">
            <ext:ResourceManager runat="server" />
            <ext:GridPanel ID="GridPanel1" runat="server">
                <Store>
                    <ext:Store runat="server">
                        <Model>
                            <ext:Model runat="server">
                                <Fields>
                                    <ext:ModelField Name="test1" />
                                    <ext:ModelField Name="test2" />
                                    <ext:ModelField Name="test3" />
                                </Fields>
                            </ext:Model>
                        </Model>
                    </ext:Store>
                </Store>
                <ColumnModel runat="server">
                    <Columns>
                        <ext:Column runat="server" Text="Test1" DataIndex="test1" />
                        <ext:Column runat="server" Text="Test2" DataIndex="test2" />
                        <ext:Column runat="server" Text="Test3" DataIndex="test3" />
                    </Columns>
                </ColumnModel>
                <SelectionModel>
                    <ext:RowSelectionModel runat="server" />
                </SelectionModel>
            </ext:GridPanel>
    
            <ext:Button runat="server" Text="Get SelectedRow" OnDirectClick="GetSelectedRow" />
        </form>
    </body>
    </html>
  3. #3
    Never mind! I'm having one of those days :(

    I had missed the .show() at the end of the msg instruction.

    Cheers!

    The issue I'm having is very similar, it may be related.

    In a regular grid with this:
    <SelectionModel>
                        <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" Mode="Single">
                            <DirectEvents>
                                <Select OnEvent="RowSelection" />
                            </DirectEvents>
                        </ext:RowSelectionModel>
                    </SelectionModel>
    supposedly invokes a direct method called "RowSelection"

    protected void RowSelection(object sender, DirectEventArgs e)
        {        
            X.Msg.Notify("msg", "msg!");        
        }
    however, when a row is selected, the method RowSelection is never reached! I checked with firebug and when a row is selected, there's a POST with parameters sent back, however, the response is empty: {}

    This should be easy to reproduce.

    I would appreciate help!

    Quote Originally Posted by Daniil View Post
    Hi @zhurui124,

    I can't reproduce with the following test case. Can you?

    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 GetSelectedRow(object sender, DirectEventArgs e)
        {
            X.Msg.Alert("GetSelectedRow", (this.GridPanel1.GetSelectionModel() as RowSelectionModel).SelectedRow.RowIndex).Show();
        }
    </script>
    
    <!DOCTYPE html>
    
    <html>
    <head runat="server">
        <title>Ext.NET v2 Example</title>
    </head>
    <body>
        <form runat="server">
            <ext:ResourceManager runat="server" />
            <ext:GridPanel ID="GridPanel1" runat="server">
                <Store>
                    <ext:Store runat="server">
                        <Model>
                            <ext:Model runat="server">
                                <Fields>
                                    <ext:ModelField Name="test1" />
                                    <ext:ModelField Name="test2" />
                                    <ext:ModelField Name="test3" />
                                </Fields>
                            </ext:Model>
                        </Model>
                    </ext:Store>
                </Store>
                <ColumnModel runat="server">
                    <Columns>
                        <ext:Column runat="server" Text="Test1" DataIndex="test1" />
                        <ext:Column runat="server" Text="Test2" DataIndex="test2" />
                        <ext:Column runat="server" Text="Test3" DataIndex="test3" />
                    </Columns>
                </ColumnModel>
                <SelectionModel>
                    <ext:RowSelectionModel runat="server" />
                </SelectionModel>
            </ext:GridPanel>
    
            <ext:Button runat="server" Text="Get SelectedRow" OnDirectClick="GetSelectedRow" />
        </form>
    </body>
    </html>
    Last edited by rgamero; Mar 28, 2013 at 7:42 PM.
  4. #4
    Now I'm experiencing kind of the same issue with this code:

                   <SelectionModel>
                        <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" SingleSelect="true">
                            <DirectEvents>
                                <Select OnEvent="RowSelectionModel1_RowSelect" Delay="1" />
                            </DirectEvents>
                        </ext:RowSelectionModel>
                    </SelectionModel>
    this is the direct method:

    protected void RowSelectionModel1_RowSelect(object sender, DirectEventArgs e)
        {
            X.Msg.Alert("DirectEvent", RowSelectionModel1.SelectedRow.RecordID).Show();
        }
    When I click a row, I get the error:
    Object reference not set to an instance of an object.
  5. #5
    Hi,

    Please replace
    X.Msg.Notify("msg", "msg!");
    with
    X.Msg.Notify("msg", "msg!").Show();
    Regarding the second problem. Please provide a full test case to reproduce.
  6. #6
    Thanks!
    I have a grid:

    <ext:FormPanel ID="ListPanel" Cls="form-panel" BodyCls="form-panel-body" runat="server" AutoHeight="true" Width="600" Border="false" BodyPadding="10" DefaultAnchor="100%">
            <Items>        
                <ext:GridPanel ID="ListGrid" Title="title" runat="server" Header="false" frame="true" Width="600" Height="120" Border="false" Style="">                         
                    <Store>
                        <ext:Store ID="ListGridStore" runat="server" PageSize="10">
                            <Model>
                                <ext:Model ID="Model1" runat="server">
                                    <Fields>
                                        <ext:ModelField Name="myId" />                                    
                                        <ext:ModelField Name="firstName" />
                                        <ext:ModelField Name="lastName" />
                                        <ext:ModelField Name="hasAgreed" />                                                                        
                                    </Fields>
                                </ext:Model>
                            </Model>
                        </ext:Store>
                    </Store>
                    <ColumnModel ID="ColumnModel1" runat="server">
                        <Columns>
                            <ext:Column ID="Column6" runat="server" DataIndex="myId" Visible="false" />                        
                            <ext:Column ID="Column3" runat="server" Text="First Name" Width="140" Sortable="true" DataIndex="firstName" />
                            <ext:Column ID="Column4" runat="server" Text="Last Name" Width="140" Sortable="true" DataIndex="lastName" />                        
                            <ext:Column ID="Column5" runat="server" Text="Date" Width="50" Sortable="true" DataIndex="hasAgreed" />
                        </Columns>
                    </ColumnModel>                 
                    <SelectionModel>
                        <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" SingleSelect="true">
                            <DirectEvents>
                                <Select OnEvent="RowSelectionModel1_RowSelect" Delay="1">
                                    <ExtraParams>                                    
                                        <ext:Parameter Name="Values" Value="Ext.encode(#{ListGrid}.getRowsValues({selectedOnly:true}))" Mode="Raw" />
                                    </ExtraParams>
                                </Select>
                            </DirectEvents>
                        </ext:RowSelectionModel>
                    </SelectionModel>                                                                 
                </ext:GridPanel>
            </Items>                     
        </ext:FormPanel>
    
    <ext:FormPanel ID="SecondPanel" Title="<span>text</span>" Visible="false" runat="server" Cls="form-panel" AutoHeight="true" Frame="true" Width="600" Border="true" BodyPadding="10"  DefaultAnchor="100%">
            <Items>
                <ext:Label ID="Label1" runat="server" Html="<span style='font-weight:bold;'>Please take your time to read each item while checking boxes.</span>"></ext:Label>
                <ext:Checkbox runat="server" ID="box1" cls="chkbox" BoxLabelCls="chkbox-label" BoxLabel="Condition 1"></ext:Checkbox>
                <ext:Checkbox runat="server" ID="box2" cls="chkbox" BoxLabelCls="chkbox-label"  BoxLabel="Condition 2"></ext:Checkbox>
                                     
            </Items>       
            <Buttons>
                    <ext:Button ID="Button1" runat="server" Text="Submit Agreement">
                        <DirectEvents>
                            <Click OnEvent="signButton_CLick"></Click>
                        </DirectEvents>
                    </ext:Button>                
            </Buttons>        
        </ext:FormPanel>
    the grid is populated nicely with data from the DB. However, not all this code is executed when selecting a row:

    public void RowSelectionModel1_RowSelect(object sender, DirectEventArgs e)
        {        
            //some of these lines are like if they were never written in this method, like non-existent
            SecondPanel.Visible = true; //this line won't execute
    
            X.Msg.Notify("msg", e.ExtraParams); //this line won't execute
    
            X.Msg.Alert("DirectEvent", RowSelectionModel1.SelectedRow.RecordID).Show(); //this line won't execute
    
            //then this section 
            RowSelectionModel sm = this.ListGrid.GetSelectionModel() as RowSelectionModel;
            StringBuilder sb = new StringBuilder();
            foreach (SelectedRow row in sm.SelectedRows)
            {
                sb.AppendFormat("RecordID: {0}&nbsp;&nbsp;&nbsp;&nbsp;Row index: {1}<br/>", row.RecordID, row.RowIndex);
            }       
            X.Msg.Alert("DirectEvent", sb.ToString()).Show(); //this alert will show but sb is empty, so shows an empty alert.
            
            SecondPanel.SetTitle("this is title"); //this will actually work (if leaving the agreement panel visible, if visible=false, this line will fail)
        }
  7. #7
    Figured it out. All my mistakes.

    Please literally ignore my previous post.

    thanks!

Similar Threads

  1. Replies: 2
    Last Post: Oct 31, 2011, 5:31 AM
  2. Replies: 2
    Last Post: Oct 04, 2011, 2:39 AM
  3. [CLOSED] GridPanel : SelectedRow is always NULL?
    By wagger in forum 1.x Legacy Premium Help
    Replies: 1
    Last Post: Apr 06, 2011, 4:46 AM
  4. Replies: 1
    Last Post: Oct 12, 2010, 9:50 AM
  5. Replies: 1
    Last Post: Oct 30, 2008, 5:57 AM

Tags for this Thread

Posting Permissions