or
<asp:Content ID="__functionLeft" ContentPlaceHolderID="MainContent" runat="Server"><asp:UpdatePanel ID="__upDatePanel" runat="server"> <ContentTemplate> <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> <script type="text/javascript"> // <![CDATA[ //On insert and update buttons click temporarily disables ajax to perform upload actions function conditionalPostback(sender, eventArgs) { var theRegexp = new RegExp("\.UpdateButton$|\.PerformInsertButton$", "ig"); if (eventArgs.get_eventTarget().match(theRegexp)) { var upload = $find(window['UploadId']); //AJAX is disabled only if file is selected for upload if (upload.getFileInputs()[0].value != "") { eventArgs.set_enableAjax(false); } } } function validateRadUpload(source, e) { e.IsValid = false; var upload = $find(source.parentNode.getElementsByTagName('div')[0].id); var inputs = upload.getFileInputs(); for (var i = 0; i < inputs.length; i++) { //check for empty string or invalid extension if (inputs[i].value != "" && upload.isExtensionValid(inputs[i].value)) { e.IsValid = true; break; } } } // ]]> </script> </telerik:RadCodeBlock> <telerik:RadGrid ID="__linksRadGrid" runat="server" AllowMultiRowEdit="false" ShowStatusBar="true" GridLines="None" AllowPaging="False" AllowAutomaticUpdates="false" AllowAutomaticInserts="false" OnPreRender="LinksGridView_PreRender" OnItemCreated="LinksGridView_ItemCreated" OnNeedDataSource="LinksRadGrid_NeedDataSource" OnInsertCommand="LinksRadGrid_InsertCommand" OnUpdateCommand="LinksRadGrid_UpdateCommand" OnDeleteCommand="LinksRadGrid_DeleteCommand" OnItemDataBound="LinksRadGrid_ItemDataBound" OnItemCommand="LinksRadGrid_ItemCommand" OnEditCommand="LinksRadGrid_EditCommand" AllowSorting="true" Skin="Transparent" Width="450px" > <MasterTableView AutoGenerateColumns="False" DataKeyNames="IdAttachment" CommandItemDisplay="Bottom" > <PagerStyle Mode="NextPrevAndNumeric" /> <CommandItemTemplate> <div style="padding: 5px 5px;"> <asp:ImageButton ID="imgInsert" runat="server" CommandName="InitInsert" AlternateText="Insert New Record" ToolTip = "Insert New Record" /> <asp:ImageButton ID="imgRefresh" runat="server" CommandName="RebindGrid" AlternateText="Refresh the grid" ToolTip = "Refresh the grid" /> </div> </CommandItemTemplate> <Columns> <telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditAttachmentLinks" ItemStyle-Width="30px" ItemStyle-HorizontalAlign="Center"/> <telerik:GridBoundColumn DataField="Title" DataType="System.String" HeaderText="Title" SortExpression="Title" UniqueName="Title"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Description" DataType="System.String" HeaderText="Description" SortExpression="Description" UniqueName="Description"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="AttachmentType" DataType="System.String" HeaderText="AttachmentType" SortExpression="AttachmentType" UniqueName="AttachmentType" Display="false"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Url" DataType="System.String" HeaderText="Url" SortExpression="Url" UniqueName="URL" Display="false"> </telerik:GridBoundColumn> <telerik:GridTemplateColumn HeaderText="Type" UniqueName="Type" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" > <ItemTemplate> <asp:ImageButton ID="__attachedTypeImageButton" runat="server" /> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridButtonColumn CommandName="Delete" ButtonType="ImageButton" UniqueName="DeleteAttachmentLinks" ConfirmText="Delete this record?" ConfirmDialogType="RadWindow" ConfirmTitle="Delete" ItemStyle-Width="30px" ItemStyle-HorizontalAlign="Center"/> </Columns> <EditFormSettings EditFormType="Template"> <EditColumn UniqueName="EditCommandColumn1"> </EditColumn> <FormTemplate> <table cellspacing="2" cellpadding="1" width="100%" border="0"> <tr> <td> <asp:Label ID="__titleLabel" runat="server" Text="Title"> </asp:Label> </td> <td> <asp:TextBox ID="__titleTextBox" runat="server" Width="100px" Text='<%# Bind("Title") %>' > </asp:TextBox> <span style="color:Red; font-weight:bold">*</span> <br /> <asp:RequiredFieldValidator ID="__titleTextBoxRFValidator" runat="server" ControlToValidate="__titleTextBox" Display="Dynamic" ErrorMessage="Please, enter a title!" SetFocusOnError="true" /> </td> </tr> <tr> <td> <asp:Label ID="__decriptionLabel" runat="server" Text="Description"> </asp:Label> </td> <td> <asp:TextBox ID="__decriptionTextBox" runat="server" Width="100px" TextMode="MultiLine" Rows="4" Text='<%# Bind("Description") %>'> </asp:TextBox> <span style="color:Red; font-weight:bold">*</span> <br /> <asp:RequiredFieldValidator ID="__decriptionTextBoxRFValidator" runat="server" ControlToValidate="__decriptionTextBox" Display="Dynamic" ErrorMessage="Please, enter a description!" SetFocusOnError="true" /> </td> </tr> <tr> <td> <asp:Label ID="__URLLabel" runat="server" Text="URL"> </asp:Label> </td> <td> <asp:TextBox ID="__urlTextBox" runat="server" Width="255px" Text='<%# Bind("URL") %>' > </asp:TextBox> </td> </tr> <tr> <td colspan="2"> <asp:Label ID="__orLabel" runat="server" Text="or"> </asp:Label> </td> </tr> <tr> <td> <asp:Label ID="__fileUploadLabel" runat="server" Text="File"> </asp:Label> </td> <td> <div id="__fileUploadDiv" runat="server"> <telerik:RadUpload ID="__fileUpload" runat="server" ControlObjectsVisibility="None" MaxFileInputsCount="1" /> </div> </td> </tr> <tr> <td align="right" colspan="2"> <asp:Button ID="btnUpdate" runat="server" Text='<%# (Container is GridEditFormInsertItem) ? "Insert" : "Update" %>' CommandName='<%# (Container is GridEditFormInsertItem) ? "PerformInsert" : "Update" %>' CausesValidation="True" > </asp:Button > <asp:Button ID="btnCancel" runat="server" Text="Cancel" CausesValidation="False" CommandName="Cancel"> </asp:Button > </td> </tr> </table> </FormTemplate> </EditFormSettings> </MasterTableView> </telerik:RadGrid> </ContentTemplate> </asp:UpdatePanel><script type="text/javascript" > function LinksFileUpload_OnChange(clientidTextBox) { document.getElementById(clientidTextBox).value = ""; } function LinksUrlTextBox_OnChange(clientIdDIVFileUpload) { //We couldn't change the input file value, so we reset the DIV container document.getElementById(clientIdDIVFileUpload).innerHTML = document.getElementById(clientIdDIVFileUpload).innerHTML; } </script></asp:Content>using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;using System.ComponentModel;using Telerik.Web.UI;using System.Text;using System.Web.UI.HtmlControls;using System.IO;public class ListHelper { public static DataTable ToDataTable<T>(IList<T> data) { PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T)); DataTable table = new DataTable(); for (int i = 0; i < props.Count; i++) { PropertyDescriptor prop = props[i]; table.Columns.Add(prop.Name, prop.PropertyType); } object[] values = new object[props.Count]; foreach (T item in data) { for (int i = 0; i < values.Length; i++) { values[i] = props[i].GetValue(item); } table.Rows.Add(values); } return table; }}public class GWAttachment { #region Accessor private string _title; public string Title { get { return this._title; } set { this._title = value; } } private string _description; public string Description { get { return this._title; } set { this._title = value; } } private string _url; public string Url { get { return this._url; } set { this._url = value; } } private string _fileName; public string FileName { get { return this._fileName; } set { this._fileName = value; } } private int _idAttachment; public int IdAttachment { get { return this._idAttachment; } set { this._idAttachment = value; } } private int _attachmentType; public int AttachmentType { get { return this._attachmentType; } set { this._attachmentType = value; } } #endregion}public partial class Default2 : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { } #region Links protected void RadGrid1_ItemCreated(object sender, GridItemEventArgs e) { if (e.Item is GridEditableItem && e.Item.IsInEditMode) { } } #region DataSource protected void LinksObjectDataSource_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) { } #endregion #region Gridview protected void LinksGridView_PreRender(object sender, EventArgs e) { } protected void LinksGridView_ItemCreated(object sender, GridItemEventArgs e) { } protected void DisableControls(ControlCollection controls) { foreach (Control c in controls) { if (c is WebControl) { ((WebControl)c).Enabled = false; } DisableControls(c.Controls); } } protected void LinksRadGrid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) { GWAttachment att1 = new GWAttachment(); att1.IdAttachment = 1; att1.Title = "Test 1"; att1.Description = "Decription 1"; att1.Url = "http://www.google.com"; att1.AttachmentType = 3; GWAttachment att2 = new GWAttachment(); att2.IdAttachment = 2; att2.Title = "Test 2"; att2.Description = "Decription 2"; att2.Url = "http://www.google.com/test"; att2.AttachmentType = 4; List<GWAttachment> attachmentList = new List<GWAttachment>(); attachmentList.Add(att1); attachmentList.Add(att2); DataTable dt = ListHelper.ToDataTable<GWAttachment>(attachmentList); this.__linksRadGrid.DataSource = dt; } protected void LinksRadGrid_ItemDataBound(object sender, GridItemEventArgs e) { if (e.Item is GridDataItem) { GridDataItem gridDataItem = (GridDataItem)e.Item; int attachedType = int.Parse(gridDataItem["AttachmentType"].Text); ImageButton image = (ImageButton)gridDataItem["Type"].FindControl("__attachedTypeImageButton"); if (attachedType == 3 && !string.IsNullOrEmpty(gridDataItem["URL"].Text)) { int idDocument = this.GetDocumentLinksId(gridDataItem["URL"].Text); if (idDocument > 0) { image.OnClientClick = this.BuildDocumentPopupScript(idDocument); } else { this.ShowImageError(image, "Error : unable to parse the internal document id! Please correct the URL."); } } else if (attachedType == 4 && !string.IsNullOrEmpty(gridDataItem["URL"].Text)) { image.OnClientClick = this.WindowsOpenPopup(gridDataItem["URL"].Text); } else if (attachedType == 5) { int idAttachment = int.Parse(gridDataItem.GetDataKeyValue("IdAttachment").ToString()); image.OnClientClick = this.GetAttachmentLinksUrl(idAttachment); } else { } } else if (e.Item is GridEditFormItem && e.Item.IsInEditMode) { GridEditFormItem editItem = e.Item as GridEditFormItem; TextBox urlTxtBox = (TextBox)editItem.FindControl("__urlTextBox"); RadUpload linksFileUpload = (RadUpload)editItem.FindControl("__fileUpload"); Control linksFileUploadDIV = (Control)editItem.FindControl("__fileUploadDiv"); if (urlTxtBox != null && linksFileUpload != null && linksFileUploadDIV != null) { // It is forbidden to reset a FileUpload, so we reset the dive container! string onChangeEventUrlTxtBox = "LinksUrlTextBox_OnChange('" + linksFileUploadDIV.ClientID + "')"; string onChangeEventLinksFileUpload = "LinksFileUpload_OnChange('" + urlTxtBox.ClientID + "')"; urlTxtBox.Attributes.Add("onchange", onChangeEventUrlTxtBox); linksFileUpload.Attributes.Add("onchange", onChangeEventLinksFileUpload); } } } #region Attachment file protected String GetAttachmentLinksUrl(int idAttachment) { String page = "~/Attachment.aspx"; page = VirtualPathUtility.ToAbsolute(page); StringBuilder url = new StringBuilder(page); url.AppendFormat("?IdAttachment={0}&Type={1}", idAttachment, 3); string javaScript = "javascript:window.open('{0}','popup{1}','width=650,height=750,scrollbars=yes');return false;"; return String.Format(javaScript, url.ToString(), idAttachment); } #endregion protected void LinksRadGrid_ItemCommand(object source, GridCommandEventArgs e) { if (e.CommandName == RadGrid.DownloadAttachmentCommandName) { GridEditFormItem editFormItem = (GridEditFormItem)e.Item; } } protected void LinksRadGrid_EditCommand(object source, GridCommandEventArgs e) { if (e.CommandName == RadGrid.EditCommandName && e.Item is GridDataItem) { GridDataItem gridDataItem = (GridDataItem)e.Item; TextBox urlTxtBox = (TextBox)gridDataItem.FindControl("__urlTextBox"); RadUpload linksFileUpload = (RadUpload)gridDataItem.FindControl("__fileUpload"); if (urlTxtBox != null && linksFileUpload.UploadedFiles != null) { urlTxtBox.Attributes.Add("onchange", "LinksUrlTextBox_OnChange(" + linksFileUpload.ClientID + ")"); linksFileUpload.Attributes.Add("onchange", "LinksFileUpload_OnChange(" + urlTxtBox.ClientID + ")"); } } } protected void LinksRadGrid_InsertCommand(object sender, GridCommandEventArgs e) { if (e.CommandName == RadGrid.PerformInsertCommandName) { if (e.Item is GridEditFormItem) { GridEditFormItem gridDataItem = (GridEditFormItem)e.Item; this.SaveAttachment(gridDataItem, false); this.__linksRadGrid.Rebind(); } } } protected void LinksRadGrid_UpdateCommand(object sender, GridCommandEventArgs e) { if (e.CommandName == RadGrid.UpdateCommandName) { if (e.Item is GridEditFormItem) { GridEditFormItem gridDataItem = (GridEditFormItem)e.Item; this.SaveAttachment(gridDataItem, true); this.__linksRadGrid.Rebind(); } } } protected void LinksRadGrid_DeleteCommand(object sender, GridCommandEventArgs e) { GridEditableItem editedItem = e.Item as GridEditableItem; } #region Save the Attachment of the document private void SaveAttachment(GridEditFormItem gridDataItem, bool isAttachmentUpdate) { int idAttachment = 0; if (isAttachmentUpdate) { idAttachment = Convert.ToInt32(gridDataItem.GetDataKeyValue("IdAttachment")); } TextBox titleTxtBox = (TextBox)gridDataItem.FindControl("__titleTextBox"); TextBox descriptionTxtBox = (TextBox)gridDataItem.FindControl("__decriptionTextBox"); TextBox urlTxtBox = (TextBox)gridDataItem.FindControl("__urlTextBox"); RadUpload linksFileUpload = (RadUpload)gridDataItem.FindControl("__fileUpload"); string title = string.Empty; string description = string.Empty; string url = string.Empty; if (titleTxtBox != null) title = titleTxtBox.Text; if (descriptionTxtBox != null) description = descriptionTxtBox.Text; if (urlTxtBox != null) url = urlTxtBox.Text; GWAttachment attachment = new GWAttachment(); attachment.Title = title; attachment.Description = description; attachment.Url = url; Stream file = null; if (linksFileUpload != null && linksFileUpload.UploadedFiles != null && urlTxtBox != null && string.IsNullOrEmpty(url)) { attachment.AttachmentType = 5; if (linksFileUpload.UploadedFiles != null && linksFileUpload.UploadedFiles.Count == 1) { UploadedFile uploadedFile = linksFileUpload.UploadedFiles[0]; file = uploadedFile.InputStream; } } //If a file is also defined, we take only the url when it exist too if (urlTxtBox != null && !string.IsNullOrEmpty(url)) { if (url.Contains(HttpContext.Current.Request.Url.Host)) { attachment.AttachmentType = 3; } else { attachment.AttachmentType = 4; } } } #endregion private string BuildDocumentPopupScript(int documentId) { string popupScript = string.Empty; string clientUrl = ResolveClientUrl("~/DetailPopup.aspx"); clientUrl = string.Format("{0}?idDocument={1}", clientUrl, documentId); popupScript = string.Format("javascript:window.open('{0}','{1}','width=800,height=750,resizable=yes,scrollbars=yes');return false;", clientUrl, 10); return popupScript; } private string WindowsOpenPopup(string url) { string popupScript = string.Empty; popupScript = string.Format(@"javascript:window.open('{0}','{1}','width=800,height=750,resizable=yes,scrollbars=yes');return false;", url, url); return popupScript; } private int GetDocumentLinksId(string url) { int idDocumentLinks = -1; var uri = new Uri(url); var query = HttpUtility.ParseQueryString(uri.Query); return idDocumentLinks; } private ImageButton ShowImageError(ImageButton imageBut, string message) { return imageBut; } #endregion #endregion}| dock.Attributes.Add("OnDockPositionChanged", "RadDock_DockPositionChanged") |
| dock.OnClientDockPositionChanged = "RadDock_DockPositionChanged" |
| Protected Sub RadDock_DockPositionChanged(ByVal sender As Object, ByVal e As Telerik.Web.UI.DockPositionChangedEventArgs) |
| Dim dock As RadDock |
| dock = DirectCast(sender, RadDock) |
| If dock.DockZoneID <> e.DockZoneID Then |
| ... |
Hi,
I try to generate an OrgChart dynamically, for do that, I need to add actions to the orgChart item (by RadButton).
In my first POC, I try the programm below.
<%@ Control language="C#" Inherits="DotNetNuke.Modules.Quanteam.ContractModule.View" AutoEventWireup="false" Codebehind="View.ascx.cs" %><%@ Register assembly="System.Web.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" namespace="System.Web.UI.WebControls" tagprefix="asp" %><%@ Register TagPrefix="telerik" Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" %><asp:MultiView ID="multiView" runat="server"> <asp:View ID="ViewContractDetail" runat="server"> <telerik:RadOrgChart runat="server" ID="radOrgChart"> <Nodes> <telerik:OrgChartNode> <ItemTemplate> <div style="background-color: Red; height: 80px; width: 180px;"> <telerik:RadButton ID="TestBtnOrgChart" Text="click : 0" runat="server" OnClick="onClick_Handler" ValidationGroup="ParamValidationGroup" ButtonType="LinkButton" BorderStyle="None"> <Icon PrimaryIconUrl="~/images/Add.gif" PrimaryIconLeft="5px" /> </telerik:RadButton> </div> </ItemTemplate> <GroupItems> <telerik:OrgChartGroupItem Text="Click for Test" /> </GroupItems> </telerik:OrgChartNode> </telerik:RadOrgChart> </asp:View></asp:MultiView>
private void Page_Load(object sender, System.EventArgs e) { try { System.Web.UI.WebControls.View view = FindControl("ViewContractDetail") as System.Web.UI.WebControls.View; multiView.SetActiveView(view); //---------------------------------------------------- // RadOrgChart //---------------------------------------------------- var nodeContract = new OrgChartNode(); radOrgChart.Nodes.Add(nodeContract); OrgChartGroupItem topContract = new OrgChartGroupItem() { Template = new MyTemplate("btnOrgChart1") }; nodeContract.GroupItems.Add(topContract); var node = new OrgChartNode(); topContract.Node.Nodes.Add(node); OrgChartGroupItem missionNode = new OrgChartGroupItem() { Template = new MyTemplate("btnOrgChart2", onClick_Handler) }; node.GroupItems.Add(missionNode); //---------------------------------------------------- // RadButton //---------------------------------------------------- RadButton radBtn = new RadButton(); radBtn.ID = "btn_1"; radBtn.Text = string.Format("click : {0}", 0); radBtn.Click += onClick_Handler; view.Controls.Add(radBtn); } catch (Exception exc) //Module failed to load { Exceptions.ProcessModuleLoadException(this, exc); } } class MyTemplate : ITemplate { private string _id; private System.EventHandler _onClick; public MyTemplate(string id) { _id = id; _onClick = onClick_Handler; } public MyTemplate(string id, System.EventHandler onClick) { _id = id; _onClick = onClick; } public void InstantiateIn(Control container) { RadButton radBtn = new RadButton(); radBtn.ID = _id; radBtn.Text = string.Format("click {1} : {0}", 0, _id); radBtn.Click += _onClick; container.Controls.Add(radBtn); } protected void onClick_Handler(object sender, System.EventArgs e) { RadButton radBtn = sender as RadButton; radBtn.Text = string.Format("click {1} : {0}", Convert.ToInt32(radBtn.Text.Split(':')[1]) + 1, _id); } } protected void onClick_Handler(object sender, System.EventArgs e) { RadButton radBtn = sender as RadButton; string[] items = radBtn.Text.Split(':'); radBtn.Text = string.Format("{0} : {1}", items[0], Convert.ToInt32(items[1].Trim()) + 1); }
When I try this program, the button created into the OrgChart by API call the Page_Load handler, but not the associated click handler.
Even if the handler came from the view or from the custom ITemplate class.
The two buttons of control :
- generated with the ASX and inside of the OrgChart
- generated with the API and outside of OrgChart
works normally.
Why my two Button generated with API into the OrgChar seems to don't call the Click event.
For information, I begin on ASP.Net since few week.
Thanks for your help.