[CLOSED] Lock first row

Page 1 of 2 12 LastLast
  1. #1

    [CLOSED] Lock first row

    Hi,

    Can I lock the first row of a grid?
    In my application, I calculate (server-side) the totals of all numeric columns of a grid.
    The totals are stored in the first row of the grid Store.

    I'd like to freeze the first row of the grid so that totals are always visible, also when I scroll the grid.

    Bye,
    Stefano
    Last edited by Daniil; Mar 02, 2011 at 7:50 AM. Reason: [CLOSED]
  2. #2
    Hi,

    We would suggest you something like this:
    https://examples1.ext.net/#/GridPane...ping_TotalRow/
  3. #3
    Hi,

    this is not exactly what I needed.
    My totals are calculated server-side and appear on the first row of the grid.
    Is possible to lock only the first row?

    Bye,
    Stefano
  4. #4
    Hi,

    GridPanel has no functionality for row locking
    My totals are calculated server-side
    You can calculate it on server side and set calculated values to DisplayField

    and appear on the first row of the grid.
    You can use TopBar instead BottomBar
  5. #5
    Hi,

    I tried something like https://examples1.ext.net/#/GridPane...ping_TotalRow/ as suggested by Daniil.
    The problem is that my grid has 30 columns and an horizontal scrollbar appears.
    So, the BottomBar (or TopBar) containing DisplayFields don't scroll with grid columns.

    Bye,
    Stefano
  6. #6
    Hmm, I can't see any way to scroll toolbar and grid together.

    I can suggest you to use an alternative way - using an additional header row.

    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[] { 1, 4, 7 },
                    new object[] { 2, 5, 8 },
                    new object[] { 3, 6, 9 }
                };
                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>
    
        <script type="text/javascript">
            var updateTotal = function () {
                var column,
                    field,
                    data = {},
                    c,
                    grid = this,
                    cs = grid.view.getColumnData();
    
                for (var j = 0, jlen = grid.store.getCount(); j < jlen; j++) {
                    var r = grid.store.getAt(j);
    
                    for (var i = 0, len = cs.length; i < len; i++) {
                        c = cs[i];
                        column = grid.getColumnModel().columns[i];
                        if (!Ext.isDefined(data[c.name])) {
                            data[c.name] = 0;
                        }
                        data[c.name] += r.data[c.name];
                    }
                }
    
                for (var i = 0; i < grid.getColumnModel().columns.length; i++) {
                    column = grid.getColumnModel().columns[i];
    
                    field = function() {
                        switch (column.dataIndex) {
                            case "test1" : return Ext.getCmp("ColumnField1");
                            case "test2" : return Ext.getCmp("ColumnField2");
                            case "test3" : return Ext.getCmp("ColumnField3");
                        }
                    }();
    
                    c = cs[i];
                    field.setValue((c.renderer)(data[c.name], {}, {}, 0, i, grid.store));
                }
            }
    
        </script>
    
        <style type="text/css">
            .total-field {
                background-color: #fff;
                font-weight: bold !important;
                color: #000;
                border: solid 1px silver;
                padding: 2px;
                margin-right: 5px;
            }
        </style>
    </head>
    <body>
        <form runat="server">
        <ext:ResourceManager runat="server" />
        <ext:GridPanel 
            ID="GridPanel1" 
            runat="server" 
            Height="100" 
            Width="200" 
            AutoScroll="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">
                        <Editor>
                            <ext:NumberField runat="server" />
                        </Editor>
                    </ext:Column>
                    <ext:Column Header="Test2" DataIndex="test2">
                        <Editor>
                            <ext:NumberField runat="server" />
                        </Editor>
                    </ext:Column>
                    <ext:Column Header="Test3" DataIndex="test3">
                        <Editor>
                            <ext:NumberField runat="server" />
                        </Editor>
                    </ext:Column>
                </Columns>
            </ColumnModel>
            <View>
                <ext:GridView runat="server">
                    <HeaderRows>
                        <ext:HeaderRow>
                            <Columns>
                                <ext:HeaderColumn>
                                    <Component>
                                        <ext:DisplayField 
                                            ID="ColumnField1" 
                                            runat="server" 
                                            DataIndex="test1" 
                                            Cls="total-field"
                                            Text="-" />
                                    </Component>
                                </ext:HeaderColumn>
                                <ext:HeaderColumn>
                                    <Component>
                                        <ext:DisplayField 
                                            ID="ColumnField2" 
                                            runat="server" 
                                            DataIndex="test2" 
                                            Cls="total-field"
                                            Text="-" />
                                    </Component>
                                </ext:HeaderColumn>
                                <ext:HeaderColumn>
                                    <Component>
                                        <ext:DisplayField 
                                            ID="ColumnField3" 
                                            runat="server" 
                                            DataIndex="test3" 
                                            Cls="total-field"
                                            Text="-" />
                                    </Component>
                                </ext:HeaderColumn>
                            </Columns>
                        </ext:HeaderRow>
                    </HeaderRows>
                </ext:GridView>
            </View>
            <Listeners>
                <AfterRender Fn="updateTotal" Delay="100" />
                <ViewReady Handler="this.getView().refreshRow = this.getView().refreshRow.createSequence(updateTotal, #{GridPanel1});" />
            </Listeners>
        </ext:GridPanel>
        </form>
    </body>
    </html>
  7. #7
    Hi Daniil,

    your solution is good, but actually my gridpanel use a LockingGridView to lock the first two columns and is not possible to combine
    LockingGridView and GridView.

    Is there a way in your solution to lock a column?

    Bye,
    Stefano
  8. #8
    Do you need to show a sum of locked column?
  9. #9
    Quote Originally Posted by Daniil View Post
    Do you need to show a sum of locked column?
    If no, it could look something like this:

    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[] { 1, 4, 7 },
                    new object[] { 2, 5, 8 },
                    new object[] { 3, 6, 9 }
                };
                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>
     
        <script type="text/javascript">
            var updateTotal = function () {
                var column,
                    field,
                    data = {},
                    c,
                    grid = this,
                    cs = grid.view.getColumnData();
     
                debugger;
                for (var j = 0, jlen = grid.store.getCount(); j < jlen; j++) {
                    var r = grid.store.getAt(j);
     
                    for (var i = 0, len = cs.length; i < len; i++) {
                        c = cs[i];
                        column = grid.getColumnModel().columns[i];
                        if (!column.locked) {
                            if (!Ext.isDefined(data[c.name])) {
                                data[c.name] = 0;
                            }
                            data[c.name] += r.data[c.name];
                        }
                    }
                }
     
                for (var i = 0; i < grid.getColumnModel().columns.length; i++) {
                    column = grid.getColumnModel().columns[i];
     
                    if (!column.locked) {
                        field = function() {
                            switch (column.dataIndex) {
                                case "test2" : return Ext.getCmp("ColumnField1");
                                case "test3" : return Ext.getCmp("ColumnField2");
                            }
                        }();
         
                        c = cs[i];
                        field.setValue(c.renderer(data[c.name], {}, {}, 0, i, grid.store));
                    }
                }
            }
     
        </script>
     
        <style type="text/css">
            .total-field {
                background-color: #fff;
                font-weight: bold !important;
                color: #000;
                border: solid 1px silver;
                padding: 2px;
                margin-right: 5px;
            }
        </style>
    </head>
    <body>
        <form runat="server">
        <ext:ResourceManager runat="server" />
        <ext:GridPanel
            ID="GridPanel1"
            runat="server"
            Height="100"
            Width="200"
            AutoScroll="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" Locked="true">
                        <Editor>
                            <ext:NumberField runat="server" />
                        </Editor>
                    </ext:Column>
                    <ext:Column Header="Test2" DataIndex="test2">
                        <Editor>
                            <ext:NumberField runat="server" />
                        </Editor>
                    </ext:Column>
                    <ext:Column Header="Test3" DataIndex="test3">
                        <Editor>
                            <ext:NumberField runat="server" />
                        </Editor>
                    </ext:Column>
                </Columns>
            </ColumnModel>
            <View>
                <ext:LockingGridView runat="server">
                    <HeaderRows>
                        <ext:HeaderRow>
                            <Columns>
                                <ext:HeaderColumn>
                                    <Component>
                                        <ext:DisplayField
                                            ID="ColumnField1"
                                            runat="server"
                                            DataIndex="test1"
                                            Cls="total-field"
                                            Text="-" />
                                    </Component>
                                </ext:HeaderColumn>
                                <ext:HeaderColumn>
                                    <Component>
                                        <ext:DisplayField
                                            ID="ColumnField2"
                                            runat="server"
                                            DataIndex="test2"
                                            Cls="total-field"
                                            Text="-" />
                                    </Component>
                                </ext:HeaderColumn>
                            </Columns>
                        </ext:HeaderRow>
                    </HeaderRows>
                </ext:LockingGridView>
            </View>
            <Listeners>
                <AfterRender Fn="updateTotal" Delay="100" />
                <ViewReady Handler="this.getView().refreshRow = this.getView().refreshRow.createSequence(updateTotal, #{GridPanel1});" />
            </Listeners>
        </ext:GridPanel>
        </form>
    </body>
    </html>
  10. #10
    Hi,

    no, locked columns are the only columns that contain no totals.

    Bye,
    Stefano
Page 1 of 2 12 LastLast

Similar Threads

  1. Question about Lock and Filter.
    By howardyin in forum 2.x Help
    Replies: 0
    Last Post: Aug 10, 2012, 9:52 AM
  2. Replies: 6
    Last Post: Apr 18, 2012, 5:28 PM
  3. Lock row for block another user to edit ?
    By Aod47 in forum 1.x Help
    Replies: 7
    Last Post: Nov 28, 2011, 2:44 PM
  4. Lock the parent (Modal=true)
    By mário in forum 1.x Help
    Replies: 4
    Last Post: Jul 20, 2010, 6:55 PM
  5. GridPanel lock Column and Header [0.8.2]
    By Born2Code in forum 1.x Help
    Replies: 0
    Last Post: May 19, 2010, 4:49 AM

Tags for this Thread

Posting Permissions