This is a migrated thread and some comments may be shown as answers.

How to inherit a custom RadGrid?

13 Answers 644 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Wolfgang Kamir
Top achievements
Rank 1
Wolfgang Kamir asked on 21 Jan 2008, 06:22 PM

Hi dear telerikers!

I was just playing around with the new Prometheus Controls and would really like to inherit from RadGrid to extend it a little (for example i would rather open up the Editform as a RadWindow instead of using the built in custom editform)

I built a Server Control Library, added a reference to Telerik.Web.UI and also to System.Web.Extensions.

The custom control is defined as follows:

using

System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Softwaretailor.Web.UI.WebControls
{
   public class CustomGrid : Telerik.Web.UI.RadGrid
   {
   }
}

Afterwards I added a Web Application and referenced the Server Control Project.

I modified the web.config file:

<

pages>
 
<controls>
    <
add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <
add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <
add tagPrefix="telerik" namespace="Telerik.Web.UI" assembly="Telerik.Web.UI"/>
    <
add tagPrefix="swt" namespace="Softwaretailor.Web.UI.WebControls" assembly="Softwaretailor.Web.UI"/>
  </
controls>
</
pages>

When I add

<

telerik:RadGrid ID="RadGrid1" runat="server"></telerik:RadGrid>

everything works as expected....

trying to use my custom control like

<

swt:CustomGrid ID="CustomGrid1" runat="server"></swt:CustomGrid>

I get a Visual Studio (2008) warning:

Warning 1 Generation of designer file failed: Unable to create type 'swt:CustomGrid'. Could not load file or assembly 'Telerik.Web.UI, Version=2007.3.1218.20, Culture=neutral, PublicKeyToken=121fae78165ba3d4' or one of its dependencies. The system cannot find the file specified. D:\My Documents\Visual Studio 2008\Projects\RMA Management\WebPlayground\Default.aspx 18 0 WebPlayground

The project compiles, but neither is the designer-file modified correctly, nor do i get intellisense support in the .aspx file....

I'm literally tearing my hair the last hour... can't figure out what I'm doing wrong...

Any help greatly appreciated!!

Kind regards,
Wolfgang

13 Answers, 1 is accepted

Sort by
0
Wolfgang Kamir
Top achievements
Rank 1
answered on 21 Jan 2008, 09:30 PM
Ok, i guess it was just a hickup in visual studio.

I started all over, set up a new solution and it worked...

Anyway... I'm curious...

Would it be possible to completely switch the MasterTableView with a custom MasterTableView which has a custom GridEditFormSettings Member to configure a WebForm as EditForm which would be displayed via a RadWindow?

Would be awesome, but i can't really persuade the Visual Studio Designer that the <MasterTableView> should not be of the type Telerik.Web.UI.GridTableView but rather something else...

Hints anyone? ;-)
0
Sebastian
Telerik team
answered on 24 Jan 2008, 03:40 PM
Hello Wolfgang,

This can probably be attained by inheriting the GridTableView class (the nested tables in hierarchy as well as the master table in the grid is of type GridTableView) and defining additional property which to specify pop-up edit type. Naturally, you will need to handle the custom edit form with your own code implementation.

Best regards,
Stephen
the Telerik team

Instantly find answers to your questions at the new Telerik Support Center
0
Wolfgang Kamir
Top achievements
Rank 1
answered on 25 Jan 2008, 09:00 AM
Hi Stepehen!

Thanks for your reply! Unfortunately it doesn't seem to be that easy...

First step was to inherit my own CustomGridTableView and add a custom property:

public class CustomGridTableView : Telerik.Web.UI.GridTableView
{
  public CustomGridTableView(Telerik.Web.UI.RadGrid ownerGrid) : base(ownerGrid) { }

  [
PersistenceMode(PersistenceMode.Attribute)]
  public string CustomProperty
  {
    get;
    set;
  }
}

Then i inherited my own CustomRadGrid class and tried to override the MasterTableView property like so:

public override CustomGridTableView MasterTableView

Unfortunately this approach doesn't work, because I get the error-message that the MasterTableView must be of type "Telerik.Web.UI.GridTableView'.

Nextbest thing would be to introduce my own MasterTableView with

public new CustomGridTableView MasterTableView

which is accepted by the compiler. When i try to use the CustomRadGrid on a aspx-site altough, I run into the real problem...

<swt:CustomRadGrid ID="Grid" runat="server">
  <MasterTableView>
  </MasterTableView>
</swt:CustomRadGrid>

I get a warning telling me 'Generation of designer file failed: Ambiguous match found... which refers to the MasterTableView

When I start up the site, I get the "Parser Error" exception at the '<MasterTableView>' line also inlcuding the errormessage 'Ambiguous match found'.

Would be really great if this could be solved....

My only other idea would be to use the Mediator design pattern to hook up the RadGrid with a RadWindowManager and let it to what has to be done ;-) But I really find the approach of inheriting from RadGrid and GridTableView a lot more apealing...

All the best,
Wolfgang
0
Missing User
answered on 28 Jan 2008, 11:29 AM
Hi Wolfgang,



Please find attached a sample web application that demonstrates the needed approach. Let me know if you have other question and/or problems.


Kind regards,
Plamen
the Telerik team

Instantly find answers to your questions at the new Telerik Support Center
0
Eric Villemure
Top achievements
Rank 1
answered on 24 Mar 2008, 05:14 PM
This seems to be working with regulat Grid but not Prometheus.  Also the MasterTableView property is known as a Telerik.Web.UI.GridTableView instead of the custom grid.

Thanks
0
Sebastian
Telerik team
answered on 25 Mar 2008, 08:45 AM
Hello Eric,

I updated the example submitted by my colleague Plamen to use the Prometheus version of RadGrid and ajaxified the control via RadAjaxManager. The same code implementation worked properly on my machine. Can you please verify that on your end? Let me know if I am missing something.

Best regards,
Stephen
the Telerik team

Instantly find answers to your questions at the new Telerik Support Center
0
Eric Villemure
Top achievements
Rank 1
answered on 25 Mar 2008, 12:44 PM
You are right, it is working with your sample it was my mistake.  My problem is that I can't override NoDetailRecordsText and NoMasterRecordsText.  Let's say what I wanted to do was to override NoDetailRecordsText to change the text to upper case.  The problem is that I can't overide those properties in GridTableView.  What I have done now is creating a property in the MyGrid named NoRecordsText and there I set mastertableview.NoDetailRecordsText and mastertableview.NoMasterRecordsText to uppercase.  This works fine.

I also have another question in the project you sent me in the MyRadGrid.cs file you can find the following lines

        public override GridTableView MasterTableView
        {
            get
            {
                return base.MasterTableView;
            }
        }

It seems to me that it is useless since it does not change the behavior right?

The second problem with this solution is that you can't set the MyProperty in the aspx files declaratively since the type of MasterTableView is not declared as MyGridTableView.  I get this error in the designer

Error    32    Validation (ASP.Net): Attribute 'MyProperty' is not a valid attribute of element 'MasterTableView'.    C:\Documents and Settings\evillemure\Desktop\Telerik\080209_CustomRadGrid\CustomRadGrid\WebSite\Default.aspx    31    88    C:\...\WebSite\


This is no more a problem for us because of the way we have decided to implement the functionnality.

Anyway this could be a feature request but it is not important enough for me to do feature request.

Thanks you for you help
0
Missing User
answered on 28 Mar 2008, 03:31 PM
Hello Eric,


Please  find attached a small sample that shows how to create your own MasterTableView with intellisense.

Don't hesitate to contact us if you have any other questions.


Greetings,
Plamen
the Telerik team

Instantly find answers to your questions at the new Telerik Support Center
0
archimede
Top achievements
Rank 1
answered on 24 Nov 2009, 01:53 PM
Goodmorning,
I want to create a new RadGrid by inherithing standard RadGrid.
My purpouse is to create a general RadGrid structure that is used like starting point to create the singles different Radgrid's instances of my program.
For example I want that each of my RadGrid has a MasterTableView with a predefined CommandItemTemplate and some properties set to specific values. I try to do this by create a DLL that contain this code:
Imports Microsoft.VisualBasic  
Imports Telerik.Web.UI  
Imports System.Web.UI.WebControls  
 
 
Public Class RadGridM  
    Inherits RadGrid  
 
    Public Sub New()  
        'common radgrid properties  
        Me.AllowPaging = True 
        Me.AllowAutomaticDeletes = True 
        Me.AllowAutomaticInserts = True 
        Me.AllowAutomaticUpdates = True 
        Me.AllowSorting = True 
        Me.EnableEmbeddedSkins = False 
        Me.PageSize = 6  
        Me.Width = Unit.Percentage(100)  
        Me.Height = Unit.Percentage(100)  
 
        'pager  
        Me.PagerStyle.Mode = GridPagerMode.Slider  
 
        'validation  
        Me.ValidationSettings.EnableValidation = True 
 
        'client-side settings  
        Me.ClientSettings.ReorderColumnsOnClient = True 
        Me.ClientSettings.EnablePostBackOnRowClick = True 
          
        Me.ClientSettings.Selecting.AllowRowSelect = True 
        Me.ClientSettings.ClientEvents.OnRowClick = "RowClick" 
        Me.ClientSettings.ClientEvents.OnRowDblClick = "RowDblClick" 
        Me.ClientSettings.ClientEvents.OnCommand = "GridCommand" 
        Me.ClientSettings.ClientEvents.OnRowSelected = "rowSelected" 
        Me.ClientSettings.ClientEvents.OnRowDeselected = "rowDeselected" 
 
    End Sub 
 
    Public Overloads Overrides Function CreateTableView() As GridTableView  
 
        Return New GridTableViewM(Me)  
    End Function 
End Class 
 
Public Class GridTableViewM  
    Inherits GridTableView  
 
    Public Sub New()  
 
        Me.AutoGenerateColumns() = False 
        Me.CommandItemDisplay() = GridCommandItemDisplay.Top  
        Me.EditMode() = GridEditMode.InPlace  
        Me.AllowFilteringByColumn() = True 
        Me.CommandItemTemplate = New CommandItemTemplateM()     
 
          
 End Sub 
 
    Public Sub New(ByVal owner As RadGrid)  
        MyBase.New(owner)  
 
        Me.AutoGenerateColumns() = True 
        Me.CommandItemDisplay() = GridCommandItemDisplay.Top  
        Me.EditMode() = GridEditMode.InPlace  
        Me.AllowFilteringByColumn() = True 
        Me.CommandItemTemplate = New CommandItemTemplateM()     
    End Sub 
End Class 
 
Public Class CommandItemTemplateM  
    Implements ITemplate  
 
    Protected insertButton As LinkButton  
    Protected editButton As LinkButton  
    Protected copyButton As LinkButton  
    Protected deleteButton As LinkButton  
    Protected filterViewButton As LinkButton  
    Protected modeButton As LinkButton  
 
    Public Sub New()  
        MyBase.New()  
 
    End Sub 
 
    Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements System.Web.UI.ITemplate.InstantiateIn  
 
        Dim menuDiv As New System.Web.UI.HtmlControls.HtmlGenericControl("DIV")           
        Dim leftMenuDiv As New System.Web.UI.HtmlControls.HtmlGenericControl("DIV")       
        leftMenuDiv.Style.Add("float""left")  
        Dim rightMenuDiv As New System.Web.UI.HtmlControls.HtmlGenericControl("DIV")      
 
        rightMenuDiv.Style.Add("float""right")  
 
        container.Controls.Add(menuDiv)  
        menuDiv.Controls.Add(leftMenuDiv)  
        menuDiv.Controls.Add(rightMenuDiv)  
 
        'comando NUOVO RECORD  
        insertButton = New LinkButton  
        insertButton.ID = "insertButton" 
        insertButton.Text = "Nuovo"                         insertButton.CommandName = "InitInsert"       
        'comando MODIFICA RECORD SELEZIONATO  
        editButton = New LinkButton  
        editButton.ID = "editButton" 
        editButton.Text = "Modifica"                        editButton.CommandName = "EditSelected"       
        'comando DUPLICA RECORD SELEZIONATO  
        copyButton = New LinkButton  
        copyButton.ID = "copyButton" 
        copyButton.Text = "Duplica"                         copyButton.CommandName = ""                 
 
        'comando ELIMINA RECORD SELEZIONATO  
        deleteButton = New LinkButton  
        deleteButton.ID = "deleteButton" 
        deleteButton.Text = "Elimina"                       deleteButton.CommandName = "DeleteSelected"           
 
'comando VISUALIZZA/NASCONDI FILTRI  
        filterViewButton = New LinkButton  
        filterViewButton.ID = "filterViewButton" 
        filterViewButton.Text = ""                                  filterViewButton.CommandName = "EnableDisableFilter"     
 
        'comando CAMBIA MODALITA' RAD GRID  
        modeButton = New LinkButton  
        modeButton.ID = "modeButton" 
        modeButton.Text = ""                                modeButton.CommandName = "ChangeMode"         
 
        'creazione MENU' DI SX  
        leftMenuDiv.Controls.Add(insertButton)  
        'leftMenuDiv.Controls.Add(New LiteralControl(" "))  
        leftMenuDiv.Controls.Add(editButton)  
        'leftMenuDiv.Controls.Add(New LiteralControl(" "))  
        leftMenuDiv.Controls.Add(copyButton)  
        'leftMenuDiv.Controls.Add(New LiteralControl(" "))  
        leftMenuDiv.Controls.Add(deleteButton)  
        'leftMenuDiv.Controls.Add(New LiteralControl(" "))  
        leftMenuDiv.Controls.Add(filterViewButton)  
 
        'creazione MENU' DI DX  
        rightMenuDiv.Controls.Add(modeButton)  
        'rightMenuDiv.Controls.Add(New LiteralControl(" "))  
 
    End Sub 
End Class 
I create a RadGridM's instance in a aspx page in this manner,
 
<RadGM:RadGridM ID="GAllarm" runat="server" DataSourceID="DS_Linq_Allarm_Culture">  
    <MasterTableView> 
    <DetailTables> 
    <RadGM:GridTableViewM ClientDataKeyNames="IdAllarm,IdCulture" DataKeyNames="IdAllarm,IdCulture"   
            DataSourceID="DS_Linq_Allarm_Culture">  
    <Columns>   
<%--Here I defined my columns--%>   
 
    </Columns> 
                     
    </RadGM:GridTableViewM> 
    </DetailTables> 
    </MasterTableView> 
    </RadGM:RadGridM> 

but in this way I can't assign my Columns collection to MasterTableView. If I set AutogenerateColumns to true all is correct. How can I let columns definition in aspx page? Can I define some event handler procedure like onItemCreated and onItemCommand in my assembly?

BestRegard
Archimede
0
Sebastian
Telerik team
answered on 24 Nov 2009, 02:50 PM
Hello archimede,

I think that the general directions from the 'Telerik RadGrid inheritance' chapter in the online documentation can help you register the columns for your inherited grid. You can refer to this article in particular.

Regards,
Sebastian
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
archimede
Top achievements
Rank 1
answered on 24 Nov 2009, 04:27 PM
Thanks for your fast reply Sebastian, but I've already read this article and I can't find any information about the definition of Columns when it's create a new grid and a new masterTableView by inherits RadGrid and GridTableView.

Best regards,
Archimede
0
Sebastian
Telerik team
answered on 24 Nov 2009, 04:31 PM
Hello archimede,

Here is a quote from the same article:

...But the GridTableView, GridBoundColumn etc. classes are defined in the Telerik.Web.UI assembly. That is why the declaration in your grid body should have the following syntax:

ASPX/ASCX Copy Code
<mytelerik: InheritedGrid ... >
   <MasterTableView>
       <Columns>
           <telerik:GridBoundColumn ...>
           </telerik: GridBoundColumn>
       </Columns>
       <DetailTables>
           <telerik:GridTableView ...>
           </telerik:GridTableView>
       </DetailTables>
   <MasterTableView>
</mytelerik: InheritedGrid>

Hope this helps.

Regards,
Sebastian
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
archimede
Top achievements
Rank 1
answered on 24 Nov 2009, 04:56 PM
Ok, but if I correctly understand, this is the case of a "reimplemented" RadGrid with standard MasterTableView ("not reimplemented").
I'm in the situation of a "reimplemented" RadGrid and "reimplemented" GridTableView. For this case there isn't any information about Column definition.

BestRegards,
Archimede
Tags
Grid
Asked by
Wolfgang Kamir
Top achievements
Rank 1
Answers by
Wolfgang Kamir
Top achievements
Rank 1
Sebastian
Telerik team
Missing User
Eric Villemure
Top achievements
Rank 1
archimede
Top achievements
Rank 1
Share this question
or