Hi
I have a little issue with a custom column i have created for the treelist.
The column is almost working as expected - it can get the value from the datasource, however when the value should be updated back to the database it dosnt happen, althou the ExtraceValues() is called and is returning the new value - i think i might be missing something simple - how you are able to help, thanks.
here is the asp markup for the column:
<%@ Register TagPrefix="CustomColumns" Namespace="CustomColumns" %>
<telerik:RadTreeList runat="server" ID="MenuTree" DataSourceID="IPPlanV4Menu" DataKeyNames="MenuID" ParentDataKeyNames="ParentMenuID" AutoGenerateColumns="False" EditMode="InPlace" >
<Columns>
.....
<CustomColumns:ValueSetColumn ValueSet="No=0,Yes=1" UniqueName="ForceVisible" HeaderText="Force Visible" DefaultInsertValue="0" DataField="ForceVisible">
<HeaderStyle Width="70px" />
<ItemStyle Width="60px" />
</CustomColumns:ValueSetColumn>
<telerik:TreeListEditCommandColumn AddRecordText="Add" CancelText="Cancel" EditText="Edit" InsertText="Insert" ShowAddButton="true" ShowEditButton="true" HeaderText="">
<HeaderStyle Width="70px" />
</telerik:TreeListEditCommandColumn>
<telerik:TreeListButtonColumn UniqueName="DeleteCommandColumn" Text="Delete" CommandName="Delete" HeaderText="">
<HeaderStyle Width="40px" />
</telerik:TreeListButtonColumn>
</Columns>
</telerik:RadTreeList>
and the code for the column with the two item templates
Imports Microsoft.VisualBasic
Imports System
Imports System.Linq
Imports System.Web.UI.WebControls
Imports Telerik.Web.UI
Namespace CustomColumns
Public Class ValueSetColumn
Inherits TreeListTemplateColumn
Private _valueSet As String
Private ListItems As OrderedDictionary
Public Property ValueSet As String
Get
Return _valueSet
End Get
Set(value As String)
Dim strs As String()
_valueSet = value
For Each Str As String In value.Split(",")
strs = Str.Split("=")
ListItems.Add(strs(0), strs(1))
Next
End Set
End Property
Public Sub New()
Me.ListItems = New OrderedDictionary()
Me.ItemTemplate = New ItemValueSetTemplate(Me)
Me.EditItemTemplate = New EditValueSetTemplate(Me)
End Sub
#Region "EditValueSetTemplate"
Private Class EditValueSetTemplate
Implements IBindableTemplate
Private owner As ValueSetColumn = Nothing
Private ddl As RadDropDownList = Nothing
Public Sub New(owner As ValueSetColumn)
Me.owner = owner
End Sub
Public Function ExtractValues(container As Control) As IOrderedDictionary Implements IBindableTemplate.ExtractValues
Dim values As New OrderedDictionary()
values(owner.DataField) = ddl.SelectedItem.Value
Return values
End Function
Public Sub InstantiateIn(container As Control) Implements ITemplate.InstantiateIn
ddl = New RadDropDownList()
ddl.Enabled = True
ddl.MergeStyle(owner.ItemStyle)
AddHandler ddl.DataBinding, AddressOf DataBinding
container.Controls.Add(ddl)
End Sub
Private Sub DataBinding(ByVal sender As Object, ByVal e As EventArgs)
Dim item As DropDownListItem
Dim DDL As RadDropDownList = DirectCast(sender, RadDropDownList)
Dim container As TreeListEditableItem = DirectCast(DDL.NamingContainer, TreeListEditableItem)
Dim selectedvalue As String = DirectCast(container.DataItem, DataRowView)(owner.DataField).ToString()
DDL.Items.Clear()
For Each ditem In owner.ListItems
item = New DropDownListItem(ditem.Key, ditem.Value)
item.Selected = (item.Value = selectedvalue)
DDL.Items.Add(item)
Next
End Sub
End Class
#End Region
#Region "ItemValueSetTemplate"
Private Class ItemValueSetTemplate
Implements IBindableTemplate
Private owner As ValueSetColumn = Nothing
Private ddl As RadDropDownList = Nothing
Public Sub New(owner As ValueSetColumn)
Me.owner = owner
End Sub
Public Function ExtractValues(container As Control) As IOrderedDictionary Implements IBindableTemplate.ExtractValues
Dim values As New OrderedDictionary()
values(owner.DataField) = ddl.SelectedItem.Value
Return Values
End Function
Public Sub InstantiateIn(container As Control) Implements ITemplate.InstantiateIn
ddl = New RadDropDownList()
AddHandler ddl.DataBinding, AddressOf DataBinding
ddl.MergeStyle(owner.ItemStyle)
ddl.Enabled = False
container.Controls.Add(ddl)
End Sub
Private Sub DataBinding(ByVal sender As Object, ByVal e As EventArgs)
Dim item As DropDownListItem
Dim DDL As RadDropDownList = DirectCast(sender, RadDropDownList)
Dim container As TreeListEditableItem = DirectCast(DDL.NamingContainer, TreeListEditableItem)
Dim selectedvalue As String = DirectCast(container.DataItem, DataRowView)(owner.DataField).ToString()
DDL.Items.Clear()
For Each ditem In owner.ListItems
item = New DropDownListItem(ditem.Key, ditem.Value)
item.Selected = (item.Value = selectedvalue)
DDL.Items.Add(item)
Next
End Sub
End Class
#End Region
End Class
End Namespace