or
<telerik:RadGrid ID="RadG_Operators" runat="server" AutoGenerateColumns="False" CssClass="RadGridCompact" DataSourceID="SDS_Operators" GridLines="None" Width="100%" style="outline:none;border:0px;"> <clientsettings> <selecting allowrowselect="true" /> </clientsettings> <HeaderStyle HorizontalAlign="Center" /> <MasterTableView cssclass="RadGridCompact" datakeynames="IdOperator" DataSourceID="SDS_Operators" style="outline:none;border:0px;"> <Columns> <telerik:GridTemplateColumn DataField="OpName" HeaderText='<%$ Resources:WebRes, Operator_Text %>'> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Eval("OpName") %>)'></asp:Label> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn DataField="OpName" HeaderText='<%$ Resources:WebRes, Operator_Text %>'> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="OpRoleName" HeaderText='<%$ Resources:WebRes, Role_Text %>' SortExpression="OpRoleName" UniqueName="OpRoleName"> <HeaderStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridTemplateColumn> <ItemTemplate> <asp:Label ID="Label2" runat="server" Text='<%# Eval("OpName") %>)'></asp:Label> </ItemTemplate> </telerik:GridTemplateColumn> </Columns> </MasterTableView> </telerik:RadGrid> <asp:SqlDataSource ID="SDS_Operators" runat="server" ConnectionString="<%$ ConnectionStrings:DBConn %>" SelectCommand="SELECT Operators.IdOperator, Operators.OpSurname + ' ' + Operators.OpName As OpName, OperatorsRoles.OpRoleName FROM Operators INNER JOIN OperatorsRoles ON Operators.IdOpRole = OperatorsRoles.IdOpRole WHERE (Operators.IdCompany = @IdCompany)"> <SelectParameters> <asp:QueryStringParameter Name="IdCompany" QueryStringField="IdCompany" /> </SelectParameters> </asp:SqlDataSource>disable:function(){ var e=this.get_tableElement(); if (e!=null) { e.className="rcbDisabled"; } this.set_enabled(false); this.get_inputDomElement().disabled="disabled"; this.disableEvents(); var d=this.get_items().get_count(); for (var c=0; c<d; c++) { this._children.getItem(c).disable(); }}disable:function(){ this.set_enabled(false); this.get_element().className="rcbDisabled";}<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><%@ Register assembly="Telerik.Web.UI" namespace="Telerik.Web.UI" tagprefix="telerik" %><script runat="server"> protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { populateLevel1(); connectEvents(); } } protected void Page_PreRender(object sender, EventArgs e) { if (!IsPostBack) { initJavascript(); } } protected void btnRun_Click(object sender, EventArgs e) { } private void populateLevel1() { ddLevel1.Items.Add(new RadComboBoxItem("", "")); for (var i = 1; i <= 4; i++) { string name = String.Format("Item {0}", i); string value = String.Format("{0}", i); ddLevel1.Items.Add(new RadComboBoxItem(name, value)); } ddLevel1.SelectedIndex = 0; } protected virtual void connectEvents() { ddLevel1.OnClientSelectedIndexChanged = "ddLevel1SelectedIndexChanged"; } protected virtual void initJavascript() { string script = @"Sys.UI.DomEvent.addHandler(window, 'load', function() {{ initJavascript('{0}'); }});"; script = String.Format(script, ddLevel2.ClientID); ClientScript.RegisterStartupScript(this.GetType(), this.ClientID + "_initJavascript", script, true); } </script><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <script type="text/javascript"> var ddLevel2 = null; function initJavascript(ddLevel2ClientID) { var foo = $find(ddLevel2ClientID); if (!foo) { window.setTimeout(function() { initJavascript(ddLevel2ClientID); }, 100); return; } ddLevel2 = $find(ddLevel2ClientID); } function ddLevel1SelectedIndexChanged(sender, eventArgs) { var item = eventArgs.get_item(); var value = item.get_value(); ddLevel2.disable(); window.setTimeout(function() { getLevel2(value, ddLevel2); }, 1000); } function getLevel2(value, dd) { dd.trackChanges(); dd.clearSelection(); dd.clearItems(); if (value) { var items = dd.get_items(); var item = new Telerik.Web.UI.RadComboBoxItem(); item.set_text(""); item.set_value(""); items.add(item); item.select(); items.add(item); for (var i = 1; i <= 4; i++) { item = new Telerik.Web.UI.RadComboBoxItem(); item.set_text("Item " + value + "." + i); item.set_value(value + "." + i); items.add(item); } dd.commitChanges(); } dd.enable(); } </script> <title>Testing RadComboBoxes</title></head><body> <form id="form1" runat="server"> <asp:ScriptManager ID="scriptManager" runat="server"></asp:ScriptManager> <asp:UpdatePanel ID="updatePanel" runat="server"> <ContentTemplate> <asp:Label ID="lblLevel1" runat="server">Level One:</asp:Label> <telerik:RadComboBox ID="ddLevel1" runat="server"></telerik:RadComboBox> <br /> <asp:Label ID="lblLevel2" runat="server">Level Two:</asp:Label> <telerik:RadComboBox ID="ddLevel2" runat="server"></telerik:RadComboBox> <br /> <asp:Button ID="btnRun" runat="server" OnClick="btnRun_Click" Text="Go!" /> </ContentTemplate> </asp:UpdatePanel> </form></body></html><telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server"> <telerik:RadGrid ID="grdFormList" runat="server" CssClass="RadGrid" GridLines="None" AllowPaging="false" AllowSorting="false" AutoGenerateColumns="False" ShowStatusBar="true" Height="100%" Width="100%" OnNeedDataSource="grdFormList_NeedDataSource" OnDataBound="grdFormList_DataBound"> <MasterTableView CommandItemDisplay="None" DataKeyNames="ID"> <NoRecordsTemplate> No forms to review </NoRecordsTemplate> <Columns> <telerik:GridBoundColumn DataField="ID" HeaderText="ID" Visible="false"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Title" HeaderText="Incentive Plan Form" HeaderStyle-HorizontalAlign="Left" ItemStyle-HorizontalAlign="Left"> </telerik:GridBoundColumn> <telerik:GridTemplateColumn DataField="View" HeaderText="View" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <telerik:radbutton id="btnViewItem" runat="server" text="" style="background:url(/_layouts/MirandaImages/msinfopath.png); width:20px; height:20px;"> <Image EnableImageButton="true" /> </telerik:radbutton> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn DataField="LastReviewDate" HeaderText="Last Review" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"> </telerik:GridBoundColumn> <telerik:GridTemplateColumn DataField="Review" HeaderText="Review This Item" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:CheckBox id="cbReview" checked="false" runat="server" /> </ItemTemplate> </telerik:GridTemplateColumn> </Columns> </MasterTableView> </telerik:RadGrid> </telerik:RadAjaxPanel> </div> <div id="divFooterButtons" style="text-align:right; width:800px; padding-top:5px;"> <telerik:RadButton ID="btnSubmit" runat="server" Text="Done" OnClick="btnSubmit_Click" /> </div>I could use some help/advice with creating a drop down button that posts back to the server when the contextmenu item is clicked. Here are two different approaches.
The first simple example does this, but it doesn't refresh nicely. When I click the contextmenu item, the menu begins to close back up and simultaneously the postback starts. So what the user sees is the menu half-way closed as the browser is busy working on the postback. It just doesn't look polished. I'd like for the page to be in some kind of stable looking state at the time the postback initiates.
<telerik:RadButton EnableSplitButton="true" ID="SplitButton3" AutoPostBack="false" runat="server" Text="Leave" OnClientClicked="OnClientSplitButton3Clicked"> </telerik:RadButton> <div style="display: none;"> <telerik:RadContextMenu ID="RadContextMenu3" runat="server" EnableRoundedCorners="false" OnItemClick="RadContextMenu3_Click"> <Items> <telerik:RadMenuItem Text="Leave by Land" Value="LAND"> </telerik:RadMenuItem> <telerik:RadMenuItem Text="Leave by Sea" Value="SEA"> </telerik:RadMenuItem> </Items> </telerik:RadContextMenu> </div> function OnClientSplitButton3Clicked(sender, args) { var contextMenu = $find("<%=RadContextMenu3.ClientID%>"); var currentLocation = $telerik.getLocation(sender.get_element()); contextMenu.showAt(currentLocation.x, currentLocation.y + 28); }
<telerik:RadButton EnableSplitButton="true" ID="SplitButton1" AutoPostBack="false" runat="server" Text="Assign" OnClientClicked="OnClientSplitButton1Clicked" EnableEmbeddedSkins="false" OnClick="SplitButton1_Click"> </telerik:RadButton> <div style="display: none;"> <telerik:RadContextMenu ID="RadContextMenu1" runat="server" OnClientItemClicked="OnClientContextMenu1Clicked"> <Items> <telerik:RadMenuItem Text="Assign and Return to List"> </telerik:RadMenuItem> <telerik:RadMenuItem Text="Assign and Continue"> </telerik:RadMenuItem> </Items> </telerik:RadContextMenu> </div> function OnClientContextMenu1Clicked(sender, args) { // 2 var itemText = args.get_item().get_text(); var splitButton = $find("<%=SplitButton1.ClientID%>"); if (itemText == "Assign and Return to List") { splitButton.set_commandName("AssignReturn"); } else if (itemText == "Assign and Continue") { splitButton.set_commandName("AssignContinue"); } splitButton.set_text("Assigning..."); //allow context menu to finish hiding before doing postback setTimeout('executeButtonClick()', 200); } function executeButtonClick() { // 3 var splitButton = $find("<%=SplitButton1.ClientID%>"); splitButton.click(); } function OnClientSplitButton1Clicked(sender, args) { var contextMenu = $find("<%=RadContextMenu1.ClientID%>"); var btnText = sender.get_text(); if (btnText == "Assign") { //text is still in initial state, so display the context menu. // 1 var currentLocation = $telerik.getLocation(sender.get_element()); contextMenu.showAt(currentLocation.x, currentLocation.y + 28); } else { // context menu has been clicked, so do a postback // 4 sender.set_autoPostBack(true); sender.set_enabled(false); } } protected void SplitButton1_Click(object sender, EventArgs e) { lblMessage.Text = "Assign with this command: " + SplitButton1.CommandName + " " + DateTime.Now.ToLongTimeString(); }<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage/DownloadCenter.Master" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="DownloadCenter.GUI.Test" %><%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %><asp:Content ID="Content1" ContentPlaceHolderID="contentPage" runat="server"> <telerik:RadScriptManager ID="RadScriptManager1" runat="server"> </telerik:RadScriptManager><telerik:RadComboBox ID="rd" runat="server" EnableLoadOnDemand="True" DataTextField="Desc" DataValueField="PayID" OnItemsRequested="RadComboBox1_ItemsRequested" AutoPostBack="True" onselectedindexchanged="rd_SelectedIndexChanged" > </telerik:RadComboBox></asp:Content>using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using DownloadCenter.Entity;using Telerik.Web.UI;namespace DownloadCenter.GUI{ public partial class Test : System.Web.UI.Page { BO bo = new BO(); DB db = new DB(); User user; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { BindRD(); } } private void BindRD() { rd.DataSource = db.GetPayMethod_CB(); rd.DataBind(); } protected void RadComboBox1_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e) { rd.DataSource = db.GetPayMethod_CB(); rd.DataBind(); } protected void rd_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e) { string tt = rd.SelectedValue.ToString(); Session["SupplierID"] = e.Value; } }<script language="javascript"> function onBlur(comboBox) { comboBox.OriginalText = comboBox.GetText(); }</script><telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> <script type="text/javascript"> function OnClientSplitButton2Clicked(sender, args) { if (args.IsSplitButtonClick()) { var currentLocation = $telerik.getLocation(sender.get_element()); var contextMenu = $find("<%=RadContextMenu2.ClientID%>"); contextMenu.showAt(currentLocation.x, currentLocation.y + 22); sender.set_autoPostBack(false); } else { sender.set_autoPostBack(true); //sender.set_enabled(false); //sender.set_text("Saving..."); } } function OnClientContextMenu2Clicked(sender, args) { var itemText = args.get_item().get_text(); var splitButton = $find("<%=SplitButton2.ClientID%>"); if (itemText == "Save and Return to List") { splitButton.set_text("Save and Return to List"); splitButton.set_commandName("SaveReturn"); } else if (itemText == "Save and Start Another") { splitButton.set_text("Save and Start Another"); splitButton.set_commandName("SaveStartAnother"); } } </script> </telerik:RadCodeBlock> <br /> <br /> <asp:Label ID="lblMessage" runat="server" Text="" Style="font-size: 12pt; color: Red;"></asp:Label> <br /> <br /> <telerik:RadButton ID="SplitButton2" AutoPostBack="false" runat="server" Text="Save and Return to List" EnableSplitButton="true" Height="22px" Enabled="true" CommandName="SaveReturn" UseSubmitBehavior="false" OnClientClicked="OnClientSplitButton2Clicked" OnClick="SplitButton2_Click"> </telerik:RadButton> <div style="display: none;"> <telerik:RadContextMenu ID="RadContextMenu2" runat="server" OnClientItemClicked="OnClientContextMenu2Clicked" EnableRoundedCorners="true"> <Items> <telerik:RadMenuItem Text="Save and Return to List"> </telerik:RadMenuItem> <telerik:RadMenuItem Text="Save and Start Another"> </telerik:RadMenuItem> </Items> </telerik:RadContextMenu> </div> protected void SplitButton2_Click(object sender, EventArgs e) { lblMessage.Text = "Save with this command: " + SplitButton2.CommandName + " " + DateTime.Now.ToLongTimeString(); }