[CLOSED] CheckColumn - disable/enable depending on data

  1. #1

    [CLOSED] CheckColumn - disable/enable depending on data

    I have a case where I need to enable/disable a checkcolumn depending on another field in the same record.
    I've tried to do this within the render property of the column like:

    x.Renderer.Handler = "if(record.data.Status != 1){this.editable = false;}"
    But this seems to be wrong...

    Do you have any example of how this can be done?


    /PatrikG
    Last edited by Daniil; Sep 13, 2011 at 9:15 PM. Reason: Please use [CODE] tags, [CLOSED]
  2. #2
    Hello!

    To achieve this behavior I would suggest you to handle the BeforeEdit event of GridPanel.

    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.Store.Primary;
                store.DataSource = new object[] { 
                                             new object[] {"non-editable", true },
                                             new object[] {"editable", true },
                                             new object[] {"non-editable", true }
                                    };
                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" ScriptMode="Debug"/>
        <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" />
                            </Fields>
                        </ext:ArrayReader>
                    </Reader>
                </ext:Store>
            </Store>
            <ColumnModel runat="server">
                <Columns>
                    <ext:Column Header="Test1" DataIndex="test1">
                        <Editor>
                            <ext:TextField runat="server"/>
                        </Editor>
                    </ext:Column>
                    <ext:CheckColumn 
                        ColumnID="CheckColumn1" 
                        Header="Checked" 
                        DataIndex="test2" 
                        Editable="true" />
                </Columns>
            </ColumnModel>
            <Listeners>
                <BeforeEdit Handler="if ((e.grid.getColumnModel().getIndexById('CheckColumn1') == e.column) && 
                                            (e.record.get('test1') == 'non-editable')) {
                                        return false; //to cancel editing           
                                     }"/>
            </Listeners>
        </ext:GridPanel>
        </form>
    </body>
    </html>
  3. #3
    Thanks for your reply,

    is there no way to make the checkbox look disabled depending on the data in the record?
    No way to use the cell/columns render method at all?

    /Patrik
  4. #4
    Hello again!

    There is a way to achieve this using Renderer.
    But to cancel editing I suggest to use the BeforeEdit event as before.

    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.Store.Primary;
                store.DataSource = new object[] {
                                             new object[] {"non-editable", true },
                                             new object[] {"editable", true },
                                             new object[] {"non-editable", false },
                                             new object[] {"editable", false }
                                    };
                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 myRenderer = function(value, metadata, record) {
                metadata.css += " x-grid3-check-col-td";
                var editable = (record.get("test1") == "editable");
                return  '<div class="x-grid3-check-col' + (value ? "-on" : "") + 
                                    " x-grid3-cc-" + this.dataIndex +
                                    (!editable ? " myDisabledClass" + (value ? "-on" : "") : "") + 
                        '">&#160;</div>';
            }
        </script>
    
        <style type="text/css">
            .myDisabledClass-on {
                background-image: url(Images/checked-disabled.gif) !important;
            }
            
            .myDisabledClass {
                background-image: url(Images/unchecked-disabled.gif) !important;
            }
        </style>
    </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" />
                            </Fields>
                        </ext:ArrayReader>
                    </Reader>
                </ext:Store>
            </Store>
            <ColumnModel runat="server">
                <Columns>
                    <ext:Column Header="Test1" DataIndex="test1">
                        <Editor>
                            <ext:TextField runat="server" />
                        </Editor>
                    </ext:Column>
                    <ext:CheckColumn 
                            ColumnID="CheckColumn1" 
                            Header="Checked" 
                            DataIndex="test2" 
                            Editable="true">
                        <Renderer Fn="myRenderer" />
                    </ext:CheckColumn>
                </Columns>
            </ColumnModel>
            <Listeners>
                <BeforeEdit Handler="if ((e.grid.getColumnModel().getIndexById('CheckColumn1') == e.column) &&
                                            (e.record.get('test1') == 'non-editable')) {
                                        return false; //to cancel editing          
                                     }"/>
            </Listeners>
        </ext:GridPanel>
        </form>
    </body>
    </html>
    I attached the images that I used in the example.
    Just put them to an Images folder within your solution folder or set a respective url.
  5. #5
    Thanks a lot!

    /Patrik
  6. #6

    Attachments ?

    Hi Daniil,

    Where i can find the attached images.

    Thanks
  7. #7
    Hi,

    As far as I can remember I've just these images by screen-shots.

    So, I created a sample with checked/unchecked disabled checkboxes and cut the respective images from the screen-shot.
  8. #8
    Here is a solution for Ext.NET v2.
    http://forums.ext.net/showthread.php?20436

Similar Threads

  1. [CLOSED] How to disable/enable tabs on the client?
    By vadym.f in forum 1.x Legacy Premium Help
    Replies: 2
    Last Post: Jun 21, 2012, 5:56 PM
  2. Button Enable/Disable
    By Maia in forum 1.x Help
    Replies: 5
    Last Post: Jul 02, 2010, 8:03 PM
  3. [CLOSED] disable/enable gridcommand
    By idrissb in forum 1.x Legacy Premium Help
    Replies: 2
    Last Post: Sep 03, 2009, 2:25 PM
  4. how to disable and enable combobox?
    By sadeque in forum 1.x Help
    Replies: 1
    Last Post: Jul 27, 2009, 5:00 AM
  5. Enable or disable the button
    By VietView in forum 1.x Help
    Replies: 4
    Last Post: Jan 09, 2009, 11:59 AM

Tags for this Thread

Posting Permissions