How to remove a column in .cs ?

14 posts, 1 answers
  1. Bruno
    Bruno avatar
    26 posts
    Member since:
    Feb 2009

    Posted 25 Mar 2009 Link to this post

    Hello

    I programmatic create a Grid with AutoGenerateCollumns = true
    after the Bind how can I remove some column ?

    would be client or server side..

    my PROC is returning these fields

    cod,productdescription,value

    and with autogenerate = true all fields will bind to the grid

    can I remove "COD" after the grid is builded ?

    NOTE : I Will Use the field COD as a relation field with the detail table.


    theres a way to make it invisible?

    thank you
  2. Bruno
    Bruno avatar
    26 posts
    Member since:
    Feb 2009

    Posted 25 Mar 2009 Link to this post

    I tried with that

    // Find the Grid 
    RadGrid Grid1 = (RadGrid)PlaceHolder1.FindControl("RadGrid1"); 
    // Count The Collumns 
    Response.Write(Grid1.Columns.Count.ToString()); 
     
    //tried to remove 
    Grid1.Columns.Remove("COD"); 
    //or 
    Grid1.Columns[0].visible = false
    //or 
    Grid1.Columns.FindByDataField("COD").visible = false

    But the problem is that

    the Grid1.Columns.Count is resturning no Columns, because the columns is being created at runtime

  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Bruno
    Bruno avatar
    26 posts
    Member since:
    Feb 2009

    Posted 25 Mar 2009 Link to this post

    or some way to Hide a column and still have it accessable in client-side.
  5. Princy
    Princy avatar
    17421 posts
    Member since:
    Mar 2007

    Posted 25 Mar 2009 Link to this post

    Hello Bruno,

    You can hide a specific column in the grid using the Display property, in the grids PreRender event and access it on client

    aspx:
    protected void RadGrid1_PreRender(object sender, EventArgs e) 
        { 
            RadGrid1.MasterTableView.GetColumn("COD").Display = false
        } 

    Thanks
    Princy.
  6. Bruno
    Bruno avatar
    26 posts
    Member since:
    Feb 2009

    Posted 26 Mar 2009 Link to this post

    I Dont have a RadGrid in my aspx.

    in the aspx I have just a PlaceHolder

    and I´m creating the RadGrid1 on the C#

    how can I set the "OnPreRender" att ?
    RadGrid RadGrid1 = new RadGrid(); 
     
            RadGrid1.ID = "RadGrid1"
            RadGrid1.DataSourceID = "SqlDataSource1"
     
            RadGrid1.MasterTableView.DataKeyNames = new string[] { VDataKey1 }; 
            RadGrid1.Width = Unit.Percentage(98); 
            RadGrid1.PageSize = 40; 
            RadGrid1.AllowPaging = true
            RadGrid1.AllowSorting = true
            RadGrid1.PagerStyle.Mode = GridPagerMode.NextPrevAndNumeric; 
            RadGrid1.PagerStyle.Position = GridPagerPosition.TopAndBottom; 
            RadGrid1.PagerStyle.NextPagesToolTip = "Próximas páginas"
            RadGrid1.PagerStyle.PrevPagesToolTip = "Páginas anteriores"
            RadGrid1.PagerStyle.NextPageText = "Próxima página"
            RadGrid1.PagerStyle.PrevPageToolTip = "Página Anterior"
            RadGrid1.AutoGenerateColumns = true
            RadGrid1.ShowStatusBar = true
            RadGrid1.ShowFooter = true
            RadGrid1.Skin = "Sunset"

    then I have to put your code

     protected void RadGrid1_PreRender(object sender, EventArgs e) 
        { 
            RadGrid grid = (RadGrid)PlaceHolder1.FindControl("RadGrid1"); 
            grid.MasterTableView.GetColumn("nummes").Display = false
        }  

    But my grid is AutoGenerated , and its not handling the event.

    Thanxs



  7. Andreas N.
    Andreas N. avatar
    26 posts
    Member since:
    Sep 2006

    Posted 26 Mar 2009 Link to this post

    Hi,

    just try to add the eventhandler in your code when creating the Grid like:

    rGdEditor

     

    .PreRender +=new EventHandler(rGdEditor_PreRender);

     


    Then you can use the event.

    Regards

    Andreas
  8. Bruno
    Bruno avatar
    26 posts
    Member since:
    Feb 2009

    Posted 26 Mar 2009 Link to this post

    Ok Andreas that works well for my MasterTable:

    protected void RadGrid1_PreRender(object sender, EventArgs e) 
        { 
            RadGrid grid = (RadGrid)PlaceHolder1.FindControl("RadGrid1"); 
            grid.MasterTableView.GetColumn("nummes").Display = false
                                
        }  

    The code above is working well, but now I need to do the same for the detail Tables as:

    protected void RadGrid1_PreRender(object sender, EventArgs e) 
        { 
            RadGrid grid = (RadGrid)PlaceHolder1.FindControl("RadGrid1"); 
            grid.MasterTableView.GetColumn("nummes").Display = false
             
            grid.MasterTableView.DetailTables[0].GetColumn("datakey").Visible = false
     
                        
        }  

    and the last line of this code is returning an error,

     Cannot find a column with UniqueName 'datakey' 
    Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 
     
    Detalhes da Exceção: Telerik.Web.UI.GridException: Cannot find a column with UniqueName 'datakey' 
     
    Erro de Origem: 
     
    Linha 46:         RadGrid grid = (RadGrid)PlaceHolder1.FindControl("RadGrid1"); 
    Linha 47:         grid.MasterTableView.GetColumn("nummes").Display = false
    Linha 48:         grid.MasterTableView.DetailTables[0].GetColumn("datakey").Visible = false
    Linha 49:  
    Linha 50:          
     
     
    Arquivo de Origem: c:\Documents and Settings\SMA_01\Meus documentos\Visual Studio 2008\BI\Protegidos\Relatorios.aspx.cs    Linha: 48 
     

    During PreRender the DetailTable already exists ??





  9. Andreas N.
    Andreas N. avatar
    26 posts
    Member since:
    Sep 2006

    Posted 26 Mar 2009 Link to this post

    Hi,

    on prerender, the creation of the objects has finished, please have a look here:

    http://www.telerik.com/help/aspnet-ajax/grdeventsequence.htm

    My Assumption is, that you don't have a column named datakey in your detail table (as the exception says), If you do have a column with that name, try to use the correct upper/lower casing of the column name, as sometimes, the grid is sensitive to that.

    regards

    Andreas
  10. Shinu
    Shinu avatar
    17764 posts
    Member since:
    Mar 2007

    Posted 27 Mar 2009 Link to this post

    Hi Bruno,

    The above given code must be working fine. You are getting this may be because the column named 'datakey' may not be present in the Detail table's column collection as Andreas said or may be you are trying to access the wrong Detail table. I would suggest you to send the C# code where you are creating the Detail table.

    Regards
    Shinu
  11. Bruno
    Bruno avatar
    26 posts
    Member since:
    Feb 2009

    Posted 27 Mar 2009 Link to this post

     private void DefineGridStructure(string VQuery1,string VDataKey1,string VQuery2,string VDataKey2,string VType2,string VQuery3,string VDataKey3) 
        { 
     
            string connString = ConfigurationManager.ConnectionStrings["coelbaConnectionString"].ConnectionString; 
                     
            SqlDataSource DataSource1 = new SqlDataSource(connString, VQuery1.ToString()); 
            DataSource1.ID = "SqlDataSource1"
             
            this.PlaceHolder1.Controls.Add(DataSource1); 
             
            RadGrid RadGrid1 = new RadGrid(); 
     
            RadGrid1.ID = "RadGrid1"
            RadGrid1.DataSourceID = "SqlDataSource1"
     
            RadGrid1.MasterTableView.DataKeyNames = new string[] { VDataKey1 }; 
            RadGrid1.Width = Unit.Percentage(98); 
            RadGrid1.PageSize = 40; 
            RadGrid1.AllowPaging = true
            RadGrid1.AllowSorting = true
            RadGrid1.PagerStyle.Mode = GridPagerMode.NextPrevAndNumeric; 
            RadGrid1.PagerStyle.Position = GridPagerPosition.TopAndBottom; 
            RadGrid1.PagerStyle.NextPagesToolTip = "Próximas páginas"
            RadGrid1.PagerStyle.PrevPagesToolTip = "Páginas anteriores"
            RadGrid1.PagerStyle.NextPageText = "Próxima página"
            RadGrid1.PagerStyle.PrevPageToolTip = "Página Anterior"
            RadGrid1.AutoGenerateColumns = true
            RadGrid1.ShowStatusBar = true
            RadGrid1.ShowFooter = true
            RadGrid1.Skin = "Sunset"
            RadGrid1.PreRender += new EventHandler(RadGrid1_PreRender); 
     
            RadGrid1.MasterTableView.PageSize = 40; 
            RadGrid1.MasterTableView.AllowMultiColumnSorting = true
     
            //Ckecking if is necessary to cretae a second level grid 
            //The Detail Table Index [0] 
            if (VQuery2 != ""
            { 
     
                SqlDataSource DataSource2 = new SqlDataSource(connString, VQuery2); 
                DataSource2.ID = "SqlDataSource2"
     
                SessionParameter SesParam1 = new SessionParameter(VDataKey1, VDataKey1); 
                DataSource2.SelectParameters.Add(SesParam1); 
                this.PlaceHolder1.Controls.Add(DataSource2); 
     
                 
                //Detail table - Orders (II in hierarchy level) 
                GridTableView tableViewOrders = new GridTableView(RadGrid1); 
                tableViewOrders.DataSourceID = "SqlDataSource2"
                tableViewOrders.Width = Unit.Percentage(100); 
     
                tableViewOrders.DataKeyNames = new string[] { VDataKey2 }; 
                tableViewOrders.AutoGenerateColumns = true
     
                GridRelationFields relationFields = new GridRelationFields(); 
                relationFields.MasterKeyField = VDataKey1.ToString(); 
                relationFields.DetailKeyField = VDataKey1.ToString(); 
                tableViewOrders.ParentTableRelation.Add(relationFields); 
     
                tableViewOrders.PreRender += new EventHandler(tableViewOrders_PreRender); 
                 
                RadGrid1.MasterTableView.DetailTables.Add(tableViewOrders); 
     
     
     
                //the detail table index[1] 
                // III Level of the grid 
                if (VQuery3 != ""
                { 
     
                    SqlDataSource DataSource3 = new SqlDataSource(connString, VQuery3); 
                    DataSource3.ID = "SqlDataSource3"
     
                     
                    if (VType2 == "DateTime"
                    { 
                         SessionParameter SessParam2 = new SessionParameter(VDataKey2, System.Data.DbType.DateTime, VDataKey2); 
                         DataSource3.SelectParameters.Add(SessParam2); 
                         this.PlaceHolder1.Controls.Add(DataSource3); 
                    } 
                    if (VType2 == "String"
                    { 
                        SessionParameter SessParam2 = new SessionParameter(VDataKey2, System.Data.DbType.String, VDataKey2); 
                        DataSource3.SelectParameters.Add(SessParam2); 
                        this.PlaceHolder1.Controls.Add(DataSource3); 
                    } 
     
                     
     
                    //grid 
     
                    GridTableView tableViewOrderDetails = new GridTableView(RadGrid1); 
                    tableViewOrderDetails.DataSourceID = "SqlDataSource3"
                    tableViewOrderDetails.Width = Unit.Percentage(100); 
     
                    //tableViewOrders.DataKeyNames = new string[] { VDataKey3 }; 
     
                    GridRelationFields relationFields2 = new GridRelationFields(); 
                    relationFields2.MasterKeyField = VDataKey2; 
                    relationFields2.DetailKeyField = VDataKey2; 
                    tableViewOrderDetails.ParentTableRelation.Add(relationFields2); 
                    tableViewOrderDetails.AutoGenerateColumns = true
                    //tableViewOrderDetails.AllowFilteringByColumn = true; 
     
     
                    tableViewOrders.DetailTables.Add(tableViewOrderDetails); 
     
                     
                } 
     
     
            } 
             
     
            //Add the RadGrid instance to the controls 
            this.PlaceHolder1.Controls.Add(RadGrid1); 
     
             
        } 
     
     
        private void CarregaGrid(string RelId) 
        { 
            //start switch statement 
            switch (RelId) 
            { 
                case "34"
                    DefineGridStructure("sp_totalAnoMes""nummes""exec sp_relPorData @nummes = @nummes""data","DateTime""select * from vwds where data = @data order by codatividade""");       
                 break
                case "35"
                    DefineGridStructure("select distinct(matrinspetor),nomeinspetor from vwds""matrinspetor""select * from vwds where matrinspetor = @matrinspetor ""codatividade","String""select * from vwds where codatividade = @codatividade order by codatividade""");       
                break
                
                default
                    DefineGridStructure("""""""""","","");       
     
                    break
            }//end switch statement 
     
     
        }
  12. Bruno
    Bruno avatar
    26 posts
    Member since:
    Feb 2009

    Posted 27 Mar 2009 Link to this post

    I Want to remove from MASterTable the column "nummes" and it is working fine with

    protected void RadGrid1_PreRender(object sender, EventArgs e) 
        { 
            RadGrid grid = (RadGrid)PlaceHolder1.FindControl("RadGrid1"); 
            switch (RelId) 
            { 
                case "34": 
                    grid.MasterTableView.GetColumn("nummes").Display = false;  
                    break; 
                 
            } 

    Now I Need to Remove the "datakey" column from my first level Detail Table I tought detailtable[0]

    But it isn´nt working

    protected void tableViewOrders_PreRender(object sender, EventArgs e) 
        { 
            RadGrid grid = (RadGrid)PlaceHolder1.FindControl("RadGrid1"); 
            grid.MasterTableView.DetailTables[0].GetColumn("data").Visible = false
     
        } 

    All my Grids is being creted in C# I have just a PLACEHOLDER inside my aspx

    My procedures is retuning the datafields and all fields are AutoGererated

     


  13. Answer
    Princy
    Princy avatar
    17421 posts
    Member since:
    Mar 2007

    Posted 27 Mar 2009 Link to this post

    Hello Bruno,

    You can use the name property of the detail table  as shown in the following code and see if it helps:
    aspx:
    <telerik:RadGrid ID="RadGrid1" DataSourceID="SqlDataSource1" runat="server" > 
            <MasterTableView DataSourceID="SqlDataSource1"
               <DetailTables > 
                 <telerik:GridTableView DataSourceID="SqlDataSource2" Name="Detail" runat="server" > 

    cs:
     protected void RadGrid1_PreRender(object sender, EventArgs e) 
        {  
          RadGrid grid = (RadGrid)PlaceHolder1.FindControl("RadGrid1");  
            foreach (GridDataItem _item in grid.Items) 
            { 
                if (_item.OwnerTableView.Name == "Detail"
                { 
                    _item.OwnerTableView.GetColumn("data").Visible = false
                }            
            } 
        } 

    Thanks
    Princy.
  14. Bruno
    Bruno avatar
    26 posts
    Member since:
    Feb 2009

    Posted 27 Mar 2009 Link to this post

    I dont have the RadGrid in my aspx

    how can I set the  Name="Detail" inside the .cs ?


  15. Bruno
    Bruno avatar
    26 posts
    Member since:
    Feb 2009

    Posted 27 Mar 2009 Link to this post

    OK I Found

      tableViewOrders.Name = "Detail";

    Now It is working perfect!!!

    Thank you all!!



Back to Top
UI for ASP.NET Ajax is Ready for VS 2017