private
void
BindData()
{
clickedType = Session[
"type"
].ToString();
int
id = ParentEntity.ParentEntityId;
GridTableView tableView =
new
GridTableView(grv);
switch
(clickedType)
{
case
"All Categories"
:
using
(SpaceCategoriesService.SpaceCategoriesServiceClient s =
new
SpaceCategoriesService.SpaceCategoriesServiceClient())
{
grv.DataSource = s.GetCategoryTable();
tableView.Name =
"Buildings"
;
tableView.DataMember =
"Buildings"
;
}
break
;
case
"SpaceCategories"
:
using
(SpaceBuildingsService.SpaceBuildingsServiceClient s =
new
SpaceBuildingsService.SpaceBuildingsServiceClient())
{
grv.DataSource = s.GetBuildingByCategoryId(id);
tableView.Name =
"Floors"
;
tableView.DataMember =
"Floors"
;
}
break
;
case
"SpaceBuildings"
:
using
(SpaceFloorService.SpaceFloorServiceClient s =
new
SpaceFloorService.SpaceFloorServiceClient())
{
grv.DataSource = s.GetFloorsByBuildingId(id);
tableView.Name =
"Rooms"
;
tableView.DataMember =
"Rooms"
;
}
break
;
case
"SpaceFloors"
:
using
(SpaceRoomService.SpaceRoomServiceClient s =
new
SpaceRoomService.SpaceRoomServiceClient())
{
grv.DataSource = s.GetRoomByFloorId(id);
}
break
;
default
:
throw
new
Exception(
"Unable to identify Entity."
);
}
grv.MasterTableView.DetailTables.Clear();
grv.MasterTableView.DetailTables.Add(tableView);
GridTableView tab =
new
GridTableView(grv);
switch
(tableView.Name)
{
case
"Buildings"
:
tab.DataMember =
"Floors"
;
tab.Name =
"Floors"
;
tableView.DetailTables.Clear();
tableView.DetailTables.Add(tab);
break
;
case
"Floors"
:
tab.DataMember =
"Rooms"
;
tab.Name =
"Rooms"
;
tableView.DetailTables.Clear();
tableView.DetailTables.Add(tab);
break
;
default
:
break
;
}
if
(tableView.Name ==
"Buildings"
)
{
GridTableView subTab =
new
GridTableView(grv);
if
(tab.Name ==
"Floors"
)
{
subTab.DataMember =
"Rooms"
;
subTab.Name =
"Rooms"
;
tab.DetailTables.Clear();
tab.DetailTables.Add(subTab);
}
}
grv.DataBind();
}
protected
void
grv_ItemCommand(
object
sender, GridCommandEventArgs e)
{
BindDetails(ParentEntity.ParentEntityId);
HttpContext.Current.Session[
"id"
] = ParentEntity.ParentEntityId;
switch
(Session[
"type"
].ToString())
{
case
"All Categories"
:
FormExtenderControl1.EntityType =
new
BaseEntities(BaseEntities.SpaceCategories);
break
;
case
"SpaceCategories"
:
FormExtenderControl1.EntityType =
new
BaseEntities(BaseEntities.SpaceBuildings);
break
;
case
"SpaceBuildings"
:
FormExtenderControl1.EntityType =
new
BaseEntities(BaseEntities.SpaceFloors);
break
;
case
"SpaceFloors"
:
FormExtenderControl1.EntityType =
new
BaseEntities(BaseEntities.SpaceRooms);
break
;
default
:
throw
new
Exception(
"Unable to identify Entity."
);
}
clickedType = Session[
"type"
].ToString();
if
(e.CommandName ==
"Modify"
)
{
btnSave.CommandName =
"Modify"
;
int
id = GetID();
FormExtenderControl1.EntityPrimaryKeyId = id;
FormExtenderControl1.DataBind();
mdlPopup.Show();
}
if
(e.CommandName ==
"Delete"
)
{
int
id = GetID();
FormExtenderControl1.Delete(id);
BindData();
}
if
(e.CommandName ==
"Add"
)
{
btnSave.CommandName =
"Add"
;
FormExtenderControl1.EntityPrimaryKeyId = -1;
FormExtenderControl1.DataBind();
mdlPopup.Show();
}
}
private
Int32 GetID()
{
foreach
(GridDataItem dataItem
in
grv.MasterTableView.DetailTables.OwnerGrid.Items)
{
if
(dataItem.Selected ==
true
)
{
Int32 ID = Int32.Parse(dataItem[
"Id"
].Text);
return
ID;
}
}
throw
new
ArgumentNullException(
"Id Not found"
);
}
Private
Sub
RadGrid_ColumnCreated(
ByVal
sender
As
Object
,
ByVal
e
As
Telerik.Web.UI.GridColumnCreatedEventArgs)
Handles
RadGrid.ColumnCreated
Dim
field
As
String
Try
field = e.Column.HeaderText
If
Not
field =
Nothing
And
field <>
""
Then
If
DataSet.Tables(TableName).Columns(field).ColumnName =
"ID"
Then
'e.Column.Display = False ' this causes some strange formatting problems
ElseIf
DataSet.Tables(TableName).Columns(field).Caption() = _
DataSet.Tables(TableName).Columns(field).ColumnName
Then
e.Column.Visible =
False
Else
e.Column.HeaderText = DataSet.Tables(TableName).Columns(field).Caption()
e.Column.HeaderStyle.Wrap =
False
End
If
End
If
Catch
ex
As
Exception
End
Try
End
Sub
DataSet.Tables(TableName).Columns(field).ColumnName
DataSet.Tables(TableName).Columns(0).ColumnName | xx_tablename | String |
e.Column.HeaderText | xx_ tablename | String |
DataSet.Tables(TableName).Columns("xx_tablename").ColumnName | xx_tablename | String |
field | xx_ tablename | String |
DataSet.Tables(TableName).Columns(field).ColumnName | Referenced object 'Item' has a value of 'Nothing'. | |
ex.message | Object reference not set to an instance of an object. | String |
<
telerik:RadGrid
ID
=
"RadGrid1"
EnableAJAX
=
"True"
ShowStatusBar
=
"true"
runat
=
"server"
Skin
=
"Default"
BorderColor
=
"#97A222"
Width
=
"95%"
AutoGenerateColumns
=
"False"
PageSize
=
"16"
AllowSorting
=
"True"
AllowMultiRowSelection
=
"False"
AllowAutomaticDeletes
=
"True"
AllowAutomaticUpdates
=
"True"
AllowPaging
=
"False"
AllowScroll
=
"True"
GridLines
=
"None"
OnDetailTableDataBind
=
"RadGrid1_DetailTableDataBind"
OnNeedDataSource
=
"RadGrid1_NeedDataSource"
>
<
MasterTableView
Width
=
"100%"
DataKeyNames
=
"Name"
AllowMultiColumnSorting
=
"True"
>
<
DetailTables
>
<
telerik:GridTableView
DataKeyNames
=
"Name"
DataMember
=
"Details"
Width
=
"100%"
GridLines
=
"Horizontal"
AllowAutomaticDeletes
=
"True"
AllowAutomaticUpdates
=
"True"
Style
=
"border-color: #d5b96a"
CssClass
=
"RadGrid2"
>
<
Columns
>
<
telerik:GridEditCommandColumn
UpdateText
=
"Update"
UniqueName
=
"EditCommandColumn"
CancelText
=
"Cancel"
EditText
=
"Edit"
>
<
HeaderStyle
Width
=
"85px"
></
HeaderStyle
>
</
telerik:GridEditCommandColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"Name"
HeaderText
=
"Name"
ReadOnly
=
"True"
HeaderButtonType
=
"TextButton"
DataField
=
"Name"
>
</
telerik:GridBoundColumn
>
<
telerik:GridTemplateColumn
UniqueName
=
"TemplateColumn"
>
<
HeaderTemplate
>
<
table
id
=
"Table1"
cellspacing
=
"1"
cellpadding
=
"1"
width
=
"300"
border
=
"1"
>
<
tr
>
<
td
colspan
=
"2"
align
=
"center"
><
b
>Revenue Growth Strategy</
b
></
TD
>
</
tr
>
<
tr
>
<
td
width
=
"50%"
><
b
>Drive organic growth</
b
></
TD
>
<
td
width
=
"50%"
><
b
>Global expansion</
b
></
TD
>
</
TR
>
</
TABLE
>
</
HeaderTemplate
>
<
ItemTemplate
>
<
table
id
=
"Table2"
cellspacing
=
"1"
cellpadding
=
"1"
width
=
"300"
border
=
"1"
>
<
tr
>
<
td
width
=
"50%"
><%# DataBinder.Eval(Container.DataItem , "Drive organic growth")%></
TD
>
<
td
width
=
"50%"
><%# DataBinder.Eval(Container.DataItem, "Global expansion")%></
TD
>
</
tr
>
</
table
>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"Drive organic growth"
HeaderText
=
"Drive organic growth"
HeaderButtonType
=
"TextButton"
DataField
=
"Drive organic growth"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"Global expansion"
HeaderText
=
"Global expansion"
HeaderButtonType
=
"TextButton"
DataField
=
"Global expansion"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"Market new products and services"
HeaderText
=
"Market new products and services"
HeaderButtonType
=
"TextButton"
DataField
=
"Market new products and services"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"Operational improvement"
HeaderText
=
"Operational improvement"
HeaderButtonType
=
"TextButton"
DataField
=
"Operational improvement"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"Technology initiatives"
HeaderText
=
"Technology initiatives"
HeaderButtonType
=
"TextButton"
DataField
=
"Technology initiatives"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
SortExpression
=
"Customer convenience"
HeaderText
=
"Customer convenience"
HeaderButtonType
=
"TextButton"
DataField
=
"Customer convenience"
>
</
telerik:GridBoundColumn
>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
<
Columns
>
<
telerik:GridBoundColumn
SortExpression
=
"Name"
HeaderText
=
"Name"
HeaderButtonType
=
"TextButton"
DataField
=
"Name"
>
</
telerik:GridBoundColumn
>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
When creating an custom DataFieldEditor an error is thrown upon postback.
The custom class looks like (same implementation as the RadFilterTextFieldEditor)
Public Class RadFilterMyTextFieldEditor |
Inherits RadFilterDataFieldEditor |
Protected Overrides Sub CopySettings(ByVal baseEditor As RadFilterDataFieldEditor) |
MyBase.CopySettings(baseEditor) |
Dim editor As RadFilterTextFieldEditor = TryCast(baseEditor, RadFilterTextFieldEditor) |
If (Not editor Is Nothing) Then |
Me.TextBoxWidth = editor.TextBoxWidth |
End If |
End Sub |
Public Overrides Function ExtractValues() As ArrayList |
Dim list As New ArrayList |
list.Add(Me._textBoxControl.Text) |
If Not MyBase.IsSingleValue Then |
list.Add(Me._secondTextBoxControl.Text) |
End If |
Return list |
End Function |
Public Overrides Sub InitializeEditor(ByVal container As Control) |
Me._textBoxControl = New TextBox |
Me._textBoxControl.CssClass = "rfText" |
Me._textBoxControl.Width = Unit.Pixel(Me.TextBoxWidth) |
container.Controls.Add(Me._textBoxControl) |
If Not MyBase.IsSingleValue Then |
MyBase.AddBetweenDelimeterControl(container) |
Me._secondTextBoxControl = New TextBox |
Me._secondTextBoxControl.CssClass = ("rfText") |
Me._secondTextBoxControl.Width = Unit.Pixel(Me.TextBoxWidth) |
container.Controls.Add(Me._secondTextBoxControl) |
End If |
End Sub |
Public Overrides Sub SetEditorValues(ByVal values As ArrayList) |
If (Not values Is Nothing) Then |
If (Not values.Item(0) Is Nothing) Then |
Me._textBoxControl.Text = (values.Item(0).ToString) |
End If |
If (Not MyBase.IsSingleValue AndAlso (Not values.Item(1) Is Nothing)) Then |
Me._secondTextBoxControl.Text = values.Item(1).ToString |
End If |
End If |
End Sub |
<DefaultValue("120"), NotifyParentProperty(True)> _ |
Public Property TextBoxWidth() As Integer |
Get |
Dim obj2 As Object = MyBase.ViewState.Item("TextBoxWidth") |
If (obj2 Is Nothing) Then |
Return 120 |
End If |
Return CInt(obj2) |
End Get |
Set(ByVal value As Integer) |
MyBase.ViewState.Item("TextBoxWidth") = value |
End Set |
End Property |
' Fields |
Private _secondTextBoxControl As TextBox |
Private _textBoxControl As TextBox |
End Class |
When using this on a web form like
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init |
Dim oMyTextFilter As New RadFilterMyTextFieldEditor |
oMyTextFilter.FieldName = "Company" |
RadFilter1.FieldEditors.Add(oMyTextFilter) |
End Sub |
The following error is thrown upon postback
Exception Details: System.ArgumentNullException: Value cannot be null. |
Parameter name: item |
Source Error: |
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. |
Stack Trace: |
[ArgumentNullException: Value cannot be null. |
Parameter name: item] |
Telerik.Web.UI.RadFilterDataFieldEditorCollection.InsertInternal(Int32 index, RadFilterDataFieldEditor item) +77 |
Telerik.Web.UI.RadFilterDataFieldEditorCollection.Add(RadFilterDataFieldEditor item) +40 |
Telerik.Web.UI.RadFilterDataFieldEditorCollection.System.Web.UI.IStateManager.LoadViewState(Object state) +602 |
Telerik.Web.UI.RadFilter.LoadViewState(Object savedState) +155 |
System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +183 |
System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +134 |
System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +221 |
System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +134 |
System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +221 |
System.Web.UI.Page.LoadAllState() +312 |
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1661 |
What goes wrong?
My intention is to create a custom editor with dropdown list boxes in stead of the regular text edits
<asp:UpdatePanel ID="upComboBox" runat="server"> |
<ContentTemplate> |
<telerik:RadComboBox ID="rcb" runat="server" SkinID="Larger" Height="200px"> |
<ItemTemplate> |
<telerik:RadTreeView ID="rtv" runat="server" OnNodeClick="rtv_NodeClick" |
CausesValidation="false"> |
</telerik:RadTreeView> |
</ItemTemplate> |
<Items> |
<telerik:RadComboBoxItem Selected="true" /> |
</Items> |
</telerik:RadComboBox> |
</ContentTemplate> |
</asp:UpdatePanel> |
Code in aspx.cs
protected void rtv_NodeClick(object sender, RadTreeNodeEventArgs e) |
{ |
rcb.Items[0].Value = e.Node.Value; |
rcb.Items[0].Text = e.Node.Text; |
} |
<telerik:RadComboBox ID="rcbConsigned" runat="server" SkinID="Larger" Height="200px"> |
<ItemTemplate> |
<asp:UpdatePanel ID="up" runat="server"> |
<ContentTemplate> |
<telerik:RadTreeView ID="rtvSubcon" runat="server" OnNodeClick="rtvSubcon_NodeClick" |
CausesValidation="false"> |
</telerik:RadTreeView> |
</ContentTemplate> |
</asp:UpdatePanel> |
</ItemTemplate> |
<Items> |
<telerik:RadComboBoxItem Selected="true" /> |
</Items> |
</telerik:RadComboBox> |
The following ASP.NET controls are not compatible with partial-page updates, and are therefore not supported as initiating or updated controls:
Web Parts controls. For more information, see ASP.NET Web Parts Controls.
FileUpload controls when they are used to upload files as part of an asynchronous postback.
GridView and DetailsView controls when their EnableSortingAndPagingCallbacks property is set to true. The default is false.
Login, PasswordRecovery, ChangePassword, and CreateUserWizard controls whose contents have not been converted to editable templates.
The Substitution control.