Hi, I had a dynamic radmenu (using ArrayList) in my masterpage.
I want to get the DataFieldID when user click the menu item, so i put a OnItemClick event in the code behind, but the event cannot be fire.
How can I fire the event ?
Or is there any other method to get the DataFieldID when user click the item ? thanks.
My masterpage code as follow:
<%@ Master Language="VB" CodeFile="LRDB.master.vb" Inherits="LRDB" %><%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %><!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 id="Head1" runat="server"> <title></title> <asp:ContentPlaceHolder ID="head" runat="server"> </asp:ContentPlaceHolder> <link href="Style/StyleSheet.css" rel="stylesheet" type="text/css" /></head><body> <form id="form1" runat="server"> <telerik:RadScriptManager runat="server" ID="RadScriptManager1"/> <telerik:RadSkinManager ID="QsfSkinManager" runat="server" ShowChooser="false" /> <telerik:RadFormDecorator ID="QsfFromDecorator" runat="server" DecoratedControls="All" EnableRoundedCorners="true" /> <div class="div_menu"> <telerik:RadMenu ID="RadMenu1" runat="server" EnableRoundedCorners="True" EnableShadows="True" EnableTextHTMLEncoding="True" Skin="Windows7" DataSourceID="ObjectDataSource1" DataFieldID="Function_ID"DataFieldParentID="ParentID" DataTextField="Description" DataNavigateUrlField="Page" OnDataBound="RadMenu1_DataBound" OnItemDataBound="RadMenu1_ItemDataBound" Width="100%" OnItemClick="RadMenu1_ItemClick"> </telerik:RadMenu> <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetMenuByFunctionID" TypeName="LRDB"> <SelectParameters> <asp:SessionParameter DefaultValue="" Name="id" SessionField="FID" Type="String" /> </SelectParameters> </asp:ObjectDataSource> <hr class= "menu_hr" /> <asp:Label ID="lb_panel" runat="server" Font-Bold="true" ForeColor="#485C7F" Font-Names="Arial" Font-Size="20pt"></asp:Label> <div id="content_function" class="content_function"> <div id="content" class="content"><asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server" ></asp:ContentPlaceHolder> </div> </div> </div> </form></body></html>VB code behind of the masterpage:
Imports SystemImports System.Collections.GenericImports Telerik.Web.UIPartial Class LRDB Inherits System.Web.UI.MasterPage Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then Dim UID As String = HttpContext.Current.Session("UserID") If Not IsNothing(UID) Then 'Generate Menu Bar By UserID, RoleTypeID Dim FID As String = GetFunctionIDByRoleTypeID(GetRoleTypeIDByUserID(UID)) HttpContext.Current.Session("FID") = FID Else Response.Redirect("~/Login.aspx") End If End If End Sub Protected Sub RadMenu1_ItemClick(ByVal sender As Object, ByVal e As Telerik.Web.UI.RadMenuEventArgs) Handles RadMenu1.ItemClick Dim SelectFunctionID As Integer = 0 SelectFunctionID = RadMenu1.SelectedValue End Sub Protected Sub RadMenu1_DataBound(ByVal sender As Object, ByVal e As EventArgs) Me.InsertSeparator(0, Me.RadMenu1) End Sub Public Sub RadMenu1_ItemDataBound(ByVal sender As Object, ByVal e As RadMenuEventArgs) If e.Item.Level = 0 Then Me.InsertSeparator(e.Item.Index + 1, Me.RadMenu1) End If End Sub Private Sub InsertSeparator(ByVal index As Integer, ByVal menu As RadMenu) Dim separator As New RadMenuItem() separator.IsSeparator = True separator.Text = "|" menu.Items.Insert(index, separator) End SubEnd ClassAnd the Common VB function:
Public Function GetFunctionIDByRoleTypeID(ByVal id As String) As String Dim FID As String = "" Dim rList = Split(id, ",") Dim dc As New dcLRDBDataContext Dim i As Integer = 0 'Get Dintinct Function ID Dim result = (From cs In dc.db_RoleType_AccessRights Where rList.Contains(cs.RoleTypeID) Select cs.FunctionID Order By FunctionID Ascending).Distinct().ToList If result.Count > 0 Then For i = 0 To result.Count - 1 FID += result.Item(i).ToString & "," Next Else FID = result.Item(0).ToString End If dc.Dispose() Return FIDEnd FunctionPublic Function GetRoleTypeIDByUserID(ByVal id As Integer) As String Dim RoleType_list As String = "" Dim dc As New dcLRDBDataContext Dim result = (From cs In dc.db_UserRoles Where cs.UserID = id Select cs.RoleTypeID).ToList Dim i As Integer = 0 If Not IsNothing(result) Then If result.Count > 0 Then For i = 0 To result.Count - 1 RoleType_list += result.Item(i).ToString & "," Next Else RoleType_list = result.Item(0).ToString End If End If dc.Dispose() Return RoleType_listEnd Function

Below is my HTML and Code behind for the Parent Page
<telerik:RadAjaxManagerProxy ID="RadAjaxManagerProxy1" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="cmbProvince"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="phPPSAControl" UpdatePanelHeight="100%" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManagerProxy> <telerik:RadComboBox ID="cmbProvince" runat="server" OnSelectedIndexChanged="cmbProvince_SelectedIndexChanged" AutoPostBack="true"> <Items> <telerik:RadComboBoxItem runat="server" Text="Quebec" Value="QC" /> <telerik:RadComboBoxItem runat="server" Text="Ontario" Value="ON" /> <telerik:RadComboBoxItem runat="server" Text="Saskatchewan" Value="SK" /> <telerik:RadComboBoxItem runat="server" Text="Manitoba" Value="MB" /> <telerik:RadComboBoxItem runat="server" Text="Yukon" Value="YT" /> <telerik:RadComboBoxItem runat="server" Text="Nuvanut" Value="NU" /> </Items> </telerik:RadComboBox> <asp:PlaceHolder ID="phPPSAControl" runat="server"></asp:PlaceHolder> private string _currentProvince = ""; protected void Page_PreInit(object sender, EventArgs e) { MasterPage master = this.Master; _currentProvince = GetCurrentOperatingProvince(IsPostBack); cmbProvince.SelectedValue = _currentProvince; txtReferenceNo.Text = "TECHLOS" + DateTime.Now.ToString("MMddyyyy-HHMMss"); //Reload Dynamic Control on Every Page Creation LoadDetailControl(); } /// <summary> /// Handles the SelectedIndexChanged event of the cmbProvince control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs"/> instance containing the event data.</param> protected void cmbProvince_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e) { phPPSAControl.Controls.Clear(); _currentProvince = e.Value; LoadDetailControl(); } /// <summary> /// Loads the detail control based on _currentProvince /// </summary> private void LoadDetailControl() { UserControl ucPPSAControl = (UserControl)LoadControl(GetUserControlPath(_currentProvince)); IPPSAView provView = ucPPSAControl as IPPSAView; ApplicationContext.TargetProvince = _currentProvince; PPSAPresenter presenter = new PPSAPresenter(provView, ApplicationContext); provView.AttachPresenter(presenter, cmbProvince.SelectedValue, txtReferenceNo.Text); phPPSAControl.Controls.Add(ucPPSAControl); } <telerik:RadAjaxManagerProxy ID="RadAjaxManagerProxy1" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="cmbProvince"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="phPPSAControl" UpdatePanelHeight="100%" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManagerProxy> <telerik:RadComboBox ID="cmbProvince" runat="server" OnSelectedIndexChanged="cmbProvince_SelectedIndexChanged"AutoPostBack="true"> <Items> <telerik:RadComboBoxItem runat="server" Text="Quebec" Value="QC" /> <telerik:RadComboBoxItem runat="server" Text="Ontario" Value="ON" /> <telerik:RadComboBoxItem runat="server" Text="Saskatchewan" Value="SK" /> <telerik:RadComboBoxItem runat="server" Text="Manitoba" Value="MB" /> <telerik:RadComboBoxItem runat="server" Text="Yukon" Value="YT" /> <telerik:RadComboBoxItem runat="server" Text="Nuvanut" Value="NU" /> </Items> </telerik:RadComboBox> <asp:PlaceHolder ID="phPPSAControl" runat="server"></asp:PlaceHolder> /// And the C# Code behind private string _currentProvince = ""; protected void Page_PreInit(object sender, EventArgs e) { MasterPage master = this.Master; _currentProvince = GetCurrentOperatingProvince(IsPostBack); cmbProvince.SelectedValue = _currentProvince; txtReferenceNo.Text = "TECHLOS" + DateTime.Now.ToString("MMddyyyy-HHMMss"); //Reload Dynamic Control on Every Page Creation LoadDetailControl(); } /// <summary> /// Handles the SelectedIndexChanged event of the cmbProvince control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs"/> instance containing the event data.</param> protected void cmbProvince_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e) { phPPSAControl.Controls.Clear(); _currentProvince = e.Value; LoadDetailControl(); } /// <summary> /// Loads the detail control based on _currentProvince /// </summary> private void LoadDetailControl() { UserControl ucPPSAControl = (UserControl)LoadControl(GetUserControlPath(_currentProvince)); IPPSAView provView = ucPPSAControl as IPPSAView; ApplicationContext.TargetProvince = _currentProvince; PPSAPresenter presenter = new PPSAPresenter(provView, ApplicationContext); provView.AttachPresenter(presenter, cmbProvince.SelectedValue, txtReferenceNo.Text); phPPSAControl.Controls.Add(ucPPSAControl); }In each UC by province, it has a Search button with an OnClick Event. The first time I land on the default province, the Search button works as expected and fires the OnClick and the Event Handler Search_Click is ran.
Below is that of a typical UC for each province
<telerik:RadButton ID="btnSearch" runat="server" Text="Search" OnClick="Search_OnClick"> </telerik:RadButton> /// <summary> /// Handles the OnClick event of the Search control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> protected void Search_OnClick(object sender, EventArgs e) { if (isValidSearchRequest()) { DisplayResultsFromResponse(presenter.Search()); } else { phResponse.Controls.Add(new LiteralControl(string.Format("<span style='color:red'>Invalid Search Request</span>"))); } } Now when I change the province to "ON" ( or any other province has the same behaviour), When I click on the Search Button on the newly generated UC , it only posts back without triggering the OnClick Event. Clicking Twice , does the same thing... and on the 3rd time, It does trigger the OnClick... and ran as normal!!!
The OnClick only occurs the first time I Load the first control and the minute I change the province, so a Post back to refresh the new View with a new Search Button, the latter when clicked doesn't trigger the Search_OnClick() but rather do a post back... Clicking again will post back again and finally a 3rd time, gets it to call this function ...
BookingDate BookingValue
1/1/2013 3
3/1/2013 6
13/2/2013 5
3/4/2013 3
13/4/2013 15
I just wnat to group by BookingDate(just by month) and Sum BookingValue for all the items belong to the same month (year was filter priviously), I need to show this information in a RadChart, my X would be month (from 1 to 12, even if there are not BookingValue for a month) and my Y would be my BookingValue.