[CLOSED] Data selection case sensitive on Store with row selection issue

  1. #1

    [CLOSED] Data selection case sensitive on Store with row selection issue

    Hi,

    In the following example, you will be able to see 2 problems where the first one is my main issue:

    1. Selection Model is case-sensitive and I'd like it to behave like insensitive, that means, select the row when clicking in the button ignoring case.

    2. Renderer Format="LowerCase" seems not to be working. UpperCase works fine.

    Of course I could convert Column1 on DataLayer level, but in my scenario it has implications.
    I also tried to convert like Data Prepare Sample but if I change the data to lowercase on Convert handler nothing gets displayed. I don't know what I was doing wrong.

    <%@ 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[] {"firsttest", "firsttest" },
                                             new object[] {"SecondTest", "SecondTest" },
                                             new object[] {"thirdTest", "thirdTest" }
                                    };
                store.DataBind();
            }
        }
    
        protected void Select_Click(object sender, DirectEventArgs e)
        {
            RowSelectionModel sm = this.GridPanel1.SelectionModel.Primary as RowSelectionModel;
            sm.SelectedRows.Add(new SelectedRow("firsttest"));
            sm.SelectedRows.Add(new SelectedRow("secondtest"));
            sm.UpdateSelection();
        }
    </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 id="Head1" runat="server">
        <title>Ext.Net Example</title>
    
        <script type="text/javascript">
            var prepare = function(value, rec) {
                rec[0] = value.toString.toLowerCase();
            };
        </script>
    
    </head>
    <body>
        <form id="Form1" runat="server">
        <ext:ResourceManager ID="ResourceManager1" runat="server" />
        <ext:GridPanel ID="GridPanel1" runat="server" AutoHeight="true">
            <Store>
                <ext:Store ID="Store1" runat="server">
                    <Reader>
                        <ext:ArrayReader IDProperty="Column1">
                            <Fields>
                                <ext:RecordField Name="Column1">
                                    <Convert Fn="prepare" />
                                </ext:RecordField>
                                <ext:RecordField Name="Column2" />
                            </Fields>
                        </ext:ArrayReader>
                    </Reader>
                </ext:Store>
            </Store>
            <ColumnModel ID="ColumnModel1" runat="server">
                <Columns>
                    <ext:Column Header="Column 1" DataIndex="Column1">
                        <Renderer Format="LowerCase" />
                    </ext:Column>
                    <ext:Column Header="Column 2" DataIndex="Column2">
                        <Renderer Format="LowerCase" />
                    </ext:Column>
                </Columns>
            </ColumnModel>
            <SelectionModel>
                <ext:CheckboxSelectionModel ID="CheckboxSelectionModel1" runat="server" SingleSelect="false" />
            </SelectionModel>
            <Buttons>
                <ext:Button ID="ButtonSelect" runat="server" Text="Select Rows">
                    <DirectEvents>
                        <Click OnEvent="Select_Click" />
                    </DirectEvents>
                </ext:Button>
            </Buttons>
        </ext:GridPanel>
        </form>
    </body>
    </html>
    Your help is much appreciated.
    Regards,
    Leo
    Last edited by Daniil; Oct 20, 2010 at 2:35 PM. Reason: [CLOSED]
  2. #2
    Hi,

    The parentheses should follow after "toString", and a convert function should return a value.

    So, the convert function can look like this:

    Example
    var prepare = function(value, rec) {
        value = value.toString().toLowerCase();
        rec[0] = value;
        return value;
    };
    But it doesn't cause lowercasing of ids...I think it's an issue and the convert function should change ids too.
    Maybe I'm wrong.
    Needs to discuss it with Dev team.
  3. #3
    Quote Originally Posted by ljcorreia View Post
    Hi,

    2. Renderer Format="LowerCase" seems not to be working. UpperCase works fine.
    Thank you for the report.
    We will notice you when a fix will be committed to the SVN.

    Here is a test case to reproduce.

    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"},
                                             new object[] {"TEST2"},
                                             new object[] {"TEST3"}
                                    };
                store.DataBind();
            }
        }
    </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="test" />
                            </Fields>
                        </ext:ArrayReader>
                    </Reader>
                </ext:Store>
            </Store>
            <ColumnModel runat="server">
                <Columns>
                    <ext:Column Header="Test" DataIndex="test">
                        <Renderer Format="LowerCase"/>
                    </ext:Column>
                </Columns>
            </ColumnModel>
        </ext:GridPanel>
        </form>
    </body>
    </html>
  4. #4
    Quote Originally Posted by Daniil View Post
    Hi,

    The parentheses should follow after "toString", and a convert function should return a value.

    So, the convert function can look like this:

    Example
    var prepare = function(value, rec) {
        value = value.toString().toLowerCase();
        rec[0] = value;
        return value;
    };
    But it doesn't cause lowercasing of ids...I think it's an issue and the convert function should change ids too.
    Maybe I'm wrong.
    Needs to discuss it with Dev team.
    Hi Daniil,

    Thanks for your quick reply.
    Sorry I forgot the parenthesis, but I put them on my real scenario.
    Unfortunately, the main issue remains though.
    Please click the button and you will notice that the second record do not get selected.

    Would you suggest something else, please?

    <%@ 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[] {"firsttest", "firsttest" },
                                             new object[] {"SecondTest", "SecondTest" },
                                             new object[] {"thirdTest", "thirdTest" }
                                    };
                store.DataBind();
            }
        }
    
        protected void Select_Click(object sender, DirectEventArgs e)
        {
            RowSelectionModel sm = this.GridPanel1.SelectionModel.Primary as RowSelectionModel;
            sm.SelectedRows.Add(new SelectedRow("firsttest"));
            sm.SelectedRows.Add(new SelectedRow("secondtest"));
            sm.UpdateSelection();
        }
    </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 id="Head1" runat="server">
        <title>Ext.Net Example</title>
    
        <script type="text/javascript">
            var prepare = function(value, rec) {
                value = value.toString().toLowerCase();
                rec[0] = value;
                return value;
            };
        </script>
    
    </head>
    <body>
        <form id="Form1" runat="server">
        <ext:ResourceManager ID="ResourceManager1" runat="server" />
        <ext:GridPanel ID="GridPanel1" runat="server" AutoHeight="true">
            <Store>
                <ext:Store ID="Store1" runat="server">
                    <Reader>
                        <ext:ArrayReader IDProperty="Column1">
                            <Fields>
                                <ext:RecordField Name="Column1">
                                    <Convert Fn="prepare" />
                                </ext:RecordField>
                                <ext:RecordField Name="Column2" />
                            </Fields>
                        </ext:ArrayReader>
                    </Reader>
                </ext:Store>
            </Store>
            <ColumnModel ID="ColumnModel1" runat="server">
                <Columns>
                    <ext:Column Header="Column 1" DataIndex="Column1">
                    </ext:Column>
                    <ext:Column Header="Column 2" DataIndex="Column2">
                    </ext:Column>
                </Columns>
            </ColumnModel>
            <SelectionModel>
                <ext:CheckboxSelectionModel ID="CheckboxSelectionModel1" runat="server" SingleSelect="false" />
            </SelectionModel>
            <Buttons>
                <ext:Button ID="ButtonSelect" runat="server" Text="Select Rows">
                    <DirectEvents>
                        <Click OnEvent="Select_Click" />
                    </DirectEvents>
                </ext:Button>
            </Buttons>
        </ext:GridPanel>
        </form>
    </body>
    </html>
    Leo.
  5. #5
    Please click the button and you will notice that the second record do not get selected.
    That's right. As I mentioned a convert function doesn't change a record's id. There is still "SecondTest".
    But this code
    sm.SelectedRows.Add(new SelectedRow("secondtest"));
    selects a record with id "secondtest".

    We will notice you when we have any update.
  6. #6
    Hi,

    LowerCase renderer is fixed. Please node that we renamed enum value LowerCase -> Lowercase
    Please update from SVN
  7. #7
    Hi Leo,

    To lowercase records ids we would suggest you to use the Store's updateRecordId method.

    Please look at the example.
    After clicking on the "To lowercase records ids" button your button will work in according to your requirement.

    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[] {"firsttest", "firsttest" },
                                             new object[] {"SecondTest", "SecondTest" },
                                             new object[] {"thirdTest", "thirdTest" }
                                    };
                store.DataBind();
            }
        }
    
        protected void Select_Click(object sender, DirectEventArgs e)
        {
            RowSelectionModel sm = this.GridPanel1.SelectionModel.Primary as RowSelectionModel;
            sm.SelectedRows.Add(new SelectedRow("firsttest"));
            sm.SelectedRows.Add(new SelectedRow("secondtest"));
            sm.UpdateSelection();
        }
    </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 id="Head1" runat="server">
        <title>Ext.Net Example</title>
    
        <script type="text/javascript">
            var prepare = function(value, rec) {
                value = value.toString().toLowerCase();
                rec[0] = value;
                return value;
            };
        </script>
    
    </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 IDProperty="Column1">
                            <Fields>
                                <ext:RecordField Name="Column1">
                                    <Convert Fn="prepare" />
                                </ext:RecordField>
                                <ext:RecordField Name="Column2" />
                            </Fields>
                        </ext:ArrayReader>
                    </Reader>
                </ext:Store>
            </Store>
            <ColumnModel runat="server">
                <Columns>
                    <ext:Column Header="Column 1" DataIndex="Column1" />
                    <ext:Column Header="Column 2" DataIndex="Column2">
                        <Renderer Format="LowerCase" />
                    </ext:Column>
                </Columns>
            </ColumnModel>
            <SelectionModel>
                <ext:CheckboxSelectionModel runat="server" SingleSelect="false" />
            </SelectionModel>
        </ext:GridPanel>
        <ext:Button runat="server" Text="Select Rows" OnDirectClick="Select_Click" />
        <ext:Button runat="server" Text="To lowercase records ids">
            <Listeners>
                <Click Handler="var store = GridPanel1.getStore();
                                store.each(function(r) {
                                    store.updateRecordId(r, r.id.toString().toLowerCase());
                                }); " />
            </Listeners>
        </ext:Button>
        </form>
    </body>
    </html>
  8. #8
    Hi,

    Thanks to all for the commitment in solving the problem.
    This can be now marked as solved.

    Thanks a lot.
    Leo

Similar Threads

  1. Replies: 3
    Last Post: Oct 05, 2012, 11:44 AM
  2. Replies: 0
    Last Post: Sep 13, 2011, 6:59 AM
  3. [CLOSED] Row Editor selection issue
    By rnachman in forum 1.x Legacy Premium Help
    Replies: 1
    Last Post: Aug 19, 2011, 2:36 PM
  4. Replies: 2
    Last Post: Aug 09, 2011, 10:38 AM
  5. grid sorting case sensitive?
    By [WP]joju in forum 1.x Help
    Replies: 2
    Last Post: Sep 22, 2009, 6:15 AM

Posting Permissions