<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Templates/PortalBase.Master" CodeBehind="master_course_list.aspx.vb" Inherits="uo.FacultyPortal.web.course_filter" %><%@ Register Src="~/code/ucMessage.ascx" TagName="Message" TagPrefix="uc" %><asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"></asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="WorkPane" runat="server"> <telerik:RadGrid ID="rgCourseInventoryList" runat="server" CssClass="RadGrid" GridLines="None" AllowPaging="True" PageSize="10" AllowSorting="True" AutoGenerateColumns="False" ShowStatusBar="true" OnDetailTableDataBind="rgCourseInventoryList_DetailTableDataBind" OnNeedDataSource="rgCourseInventoryList_NeedDataSource"> <MasterTableView CommandItemDisplay="TopAndBottom" DataKeyNames="CourseId" AutoGenerateColumns="false" HierarchyLoadMode="ServerBind" HierarchyDefaultExpanded="true" ClientDataKeyNames="CourseId"> <CommandItemSettings AddNewRecordText="<%$ Resources:ui_messages, msgAddNewRecord %>" AddNewRecordImageUrl="../config/Images/Icons/addrecord.gif" RefreshText=""/> <CommandItemTemplate> <asp:ImageButton runat="server" ImageUrl="../config/Images/Icons/addrecord.gif" OnClientClick="return ShowInsertForm();" ID="ibInsertForm" ToolTip="<%$ Resources:ui_labels, ibShowDeleteForm %>"/> </CommandItemTemplate> <Columns> <telerik:GridEditCommandColumn EditImageUrl="../config/Images/Icons/edit.png" ButtonType="ImageButton" ItemStyle-Width="10px" EditText="<%$ Resources:ui_labels, ibEditCourse %>"> </telerik:GridEditCommandColumn> <telerik:GridTemplateColumn UniqueName="gtcShowDelete" ItemStyle-Width="10px"> <ItemTemplate> <asp:ImageButton runat="server" ImageUrl="../config/Images/Icons/delete.png" ID="ibShowDeleteForm" ToolTip="<%$ Resources:ui_labels, ibShowDeleteForm %>"/> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn UniqueName="CourseCode" HeaderText="<%$Resources:ui_labels, gbcCourseCode %>" DataField="SISCourseCode"> </telerik:GridBoundColumn> <telerik:GridBoundColumn UniqueName="CourseTitle" DataField="SISCourseTitle" Visible="false"> </telerik:GridBoundColumn> <telerik:GridTemplateColumn UniqueName="gtcTitle" HeaderText="<%$ Resources:ui_labels, gtcTitle %>" ItemStyle-VerticalAlign="Middle"> <ItemTemplate> <asp:Image ID="imgParent" runat="server" Visible="false" /> <asp:Label ID="lblParentTitle" runat="server"></asp:Label> <asp:Label ID="lblCourseTitle" runat="server"></asp:Label> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn UniqueName="CourseNote" HeaderText="<%$Resources:ui_labels, gbcNote %>" DataField="SISCourseNotes"> </telerik:GridBoundColumn> <telerik:GridBoundColumn UniqueName="CourseExpired" DataField="SISCourseExpired" Visible="false"> </telerik:GridBoundColumn> <telerik:GridBoundColumn UniqueName="ParentId" DataField="ParentId" Visible="false"> </telerik:GridBoundColumn> </Columns> <EditFormSettings EditFormType="Template"> <FormTableItemStyle width="100%"></FormTableItemStyle> <FormTableStyle GridLines="None" CellSpacing="0" CellPadding="2"></FormTableStyle> <FormStyle Width="100%" backColor="white"></FormStyle> <FormTemplate> <asp:Table ID="tblCourseDetails" CellSpacing="2" CellPadding="1" runat="server" BorderWidth="1" Width="100%"> <asp:TableRow runat="server" ID="trInternal"> <asp:TableCell runat="server" ID="tcInternal"> <asp:Table ID="tblInternal" runat="server"> <asp:TableRow ID="trMessageArea" runat="server"> <asp:TableCell ID="tcMessageArea" runat="server" colspan="2"> <uc:Message ID="msgMessageArea" runat="server" /> </asp:TableCell> </asp:TableRow> <asp:TableRow runat="server" ID="trCourseCode"> <asp:TableCell runat="server" ID="tcCourseCode"> <asp:Label runat="server" ID="lblCourseCode" Text="<%$ Resources:ui_labels, lblCourseCode %>"></asp:Label> </asp:TableCell> <asp:TableCell runat="server" ID="tcActivityCode2" HorizontalAlign="Left"> <asp:TextBox runat="server" ID="txtSISCourseCode"></asp:TextBox> <asp:Label runat="server" ID="lblCourseCodeMandatory" Text="<%$ Resources:ui_labels, lblMandatoryFlag %>" CssClass="Mandatory"></asp:Label> </asp:TableCell> </asp:TableRow> <asp:TableRow runat="server" ID="tr1"> <asp:TableCell runat="server" ID="tc1"> <asp:Label runat="server" ID="lblCourseCategory" Text="<%$ Resources:ui_labels, lblCourseCategory %>"></asp:Label> </asp:TableCell> <asp:TableCell runat="server" ID="tc2" HorizontalAlign="Left"> <telerik:RadComboBox runat="server" ID="rcbCourseCategory" ></telerik:RadComboBox> <asp:Label runat="server" ID="lblCourseCategoryMandatory" Text="<%$ Resources:ui_labels, lblMandatoryFlag %>" CssClass="Mandatory"></asp:Label> </asp:TableCell> </asp:TableRow> <asp:TableRow runat="server" ID="tr2"> <asp:TableCell runat="server" ID="tc3"> <asp:Label runat="server" ID="lblCourseType" Text="<%$ Resources:ui_labels, lblCourseType %>"></asp:Label> </asp:TableCell> <asp:TableCell runat="server" ID="tc4" HorizontalAlign="Left"> <telerik:RadComboBox runat="server" ID="rcbCourseType" ></telerik:RadComboBox> <asp:Label runat="server" ID="lblCourseTypeMandatory" Text="<%$ Resources:ui_labels, lblMandatoryFlag %>" CssClass="Mandatory"></asp:Label> </asp:TableCell> </asp:TableRow> <asp:TableRow runat="server" ID="tr3"> <asp:TableCell runat="server" ID="tc5"> <asp:Label runat="server" ID="lblLanguage" Text="<%$ Resources:ui_labels, lblLanguage %>"></asp:Label> </asp:TableCell> <asp:TableCell runat="server" ID="tc6" HorizontalAlign="Left"> <telerik:RadComboBox runat="server" ID="rcbLanguage" ></telerik:RadComboBox> <asp:Label runat="server" ID="lblLanguageMandatory" Text="<%$ Resources:ui_labels, lblMandatoryFlag %>" CssClass="Mandatory"></asp:Label> </asp:TableCell> </asp:TableRow> <asp:TableRow runat="server" ID="tr4"> <asp:TableCell runat="server" ID="tc7"> <asp:Label runat="server" ID="lblAcademicUnit" Text="<%$ Resources:ui_labels, lblAcademicUnit %>"></asp:Label> </asp:TableCell> <asp:TableCell runat="server" ID="tc8" HorizontalAlign="Left"> <telerik:RadComboBox runat="server" ID="rcbAcademicUnit" MarkFirstMatch="true" ></telerik:RadComboBox> <asp:Label runat="server" ID="lblAcademicUnitMandatory" Text="<%$ Resources:ui_labels, lblMandatoryFlag %>" CssClass="Mandatory"></asp:Label> </asp:TableCell> </asp:TableRow> <asp:TableRow runat="server" ID="tr5"> <asp:TableCell runat="server" ID="tc9"> <asp:Label runat="server" ID="lblNumberOfSessions" Text="<%$ Resources:ui_labels, lblNumberOfSessions %>"></asp:Label> </asp:TableCell> <asp:TableCell runat="server" ID="tc10" HorizontalAlign="Left"> <asp:TextBox runat="server" ID="txtNumberOfSessions"></asp:TextBox> </asp:TableCell> </asp:TableRow> <asp:TableRow runat="server" ID="tr6"> <asp:TableCell runat="server" ID="tc11"> <asp:Label runat="server" ID="lblNote" Text="<%$ Resources:ui_labels, lblNote %>"></asp:Label> </asp:TableCell> <asp:TableCell runat="server" ID="tc12" HorizontalAlign="Left"> <asp:TextBox runat="server" ID="txtNote" Wrap="true" TextMode="MultiLine" Rows="4" Columns="40"></asp:TextBox> </asp:TableCell> </asp:TableRow> <asp:TableRow runat="server" ID="trCrossListCourse"> <asp:TableCell runat="server" ID="tc13"> <asp:Label runat="server" ID="lblCrossListCourseId" Text="<%$ Resources:ui_labels, lblCrossListCourseId %>"></asp:Label> </asp:TableCell> <asp:TableCell runat="server" ID="tc14" HorizontalAlign="Left"> <asp:TextBox runat="server" ID="txtCrossListCourseCode"></asp:TextBox> </asp:TableCell> </asp:TableRow> <asp:TableRow runat="server" ID="tr8"> <asp:TableCell runat="server" id="tc15" HorizontalAlign="Left" ColumnSpan="2"> <asp:Button runat="server" ID="btnUpdate" Text="<%# IIf((TypeOf(Container) is GridEditFormInsertItem), Resources.ui_labels.btnAdd.ToString(), Resources.ui_labels.btnUpdate.ToString()) %>" CommandName='<%# IIf((TypeOf(Container) is GridEditFormInsertItem), "PerformInsert", "Update") %>' /> <asp:Button runat="server" ID="btnCancel" CausesValidation="false" CommandName="Cancel" Text="<%$ Resources:ui_labels, btnCancel %>" /> </asp:TableCell> </asp:TableRow> </asp:Table> </asp:TableCell> </asp:TableRow> </asp:Table> </FormTemplate> </EditFormSettings> <DetailTables> <telerik:GridTableView runat="server" DataKeyNames="ChildCourseId" Name="CrossListView" ClientDataKeyNames="ChildCourseId"> <Columns> <telerik:GridButtonColumn ImageUrl="~/config/Images/Icons/lnk_del.png" CommandName="Delete" Text="<%$ Resources:ui_messages, msgDeleteLink %>" UniqueName="gbDeleteLink" ButtonType="ImageButton" ItemStyle-Width="10px" ConfirmText="<%$ Resources:ui_messages, msgConfirmDelete %>" ConfirmDialogType="Classic"> </telerik:GridButtonColumn> <telerik:GridTemplateColumn UniqueName="gtcShowDelete" ItemStyle-Width="10px"> <ItemTemplate> <asp:Image runat="server" ImageUrl="~/config/Images/Icons/lnk_chld.png"/> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn UniqueName="SISCourseCode" DataField="SISCourseCode"> </telerik:GridBoundColumn> <telerik:GridBoundColumn UniqueName="SISCourseTitle" DataField="SISCourseTitle"> </telerik:GridBoundColumn> <telerik:GridBoundColumn UniqueName="SISCourseExpired" DataField="SISCourseExpired" Visible="false"> </telerik:GridBoundColumn> </Columns> </telerik:GridTableView> </DetailTables> </MasterTableView> <ClientSettings> <Selecting AllowRowSelect="true"></Selecting> <ClientEvents OnRowDblClick="RowDblClickEdit"></ClientEvents> </ClientSettings> </telerik:RadGrid>Imports Telerik.Web.UIImports uo.FacultyPortal.CourseOfferImports uo.FacultyPortal.AdminImports uo.FacultyPortal.CommonImports uo.FacultyPortal.Common.ConstantsPartial Class course_filter Inherits CultureManager Private cacheManager As New CacheManager Private admin As CD_Tables = New CD_Tables Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not Page.IsPostBack Then bindRadComboBox(rcbAcademicUnit, "CD_Academic_Unit") bindRadComboBox(rcbCourseCategory, "CD_Course_Categories") End If End Sub ''' <summary> ''' Return a lst of courses to the user based on their selected criteria ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSearch.Click msgMessageArea.FlushMessages() If rcbAcademicUnit.SelectedIndex <= 0 Then msgMessageArea.AddMessage(Resources.ui_labels.lblAcademicUnit.ToString + Resources.ui_messages.errRequiredField.ToString, Constants.uoMessageType.ErrorType) Else rgCourseInventoryList.Rebind() rgCourseInventoryList.CurrentPageIndex = 0 End If End Sub Protected Sub rgCourseInventoryList_DetailTableDataBind(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridDetailTableDataBindEventArgs) Handles rgCourseInventoryList.DetailTableDataBind Dim oCourses As New Course Dim oCourseInventory As New DataTable Dim parentItem As GridDataItem = CType(e.DetailTableView.ParentItem, GridDataItem) If parentItem.Edit Then Return End If If e.DetailTableView.Name = "CrossListView" Then Dim courseId As Integer = CInt(parentItem.GetDataKeyValue("CourseId")) oCourseInventory = oCourses.getCrossListedCourses(courseId, IIf(cbShowDeleted.Checked, "Y", "N")) e.DetailTableView.DataSource = oCourseInventory End If End Sub ''' <summary> ''' Get the data for the grid ''' </summary> ''' <param name="source"></param> ''' <param name="e"></param> ''' <remarks></remarks> Protected Sub rgCourseInventoryList_NeedDataSource(ByVal source As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles rgCourseInventoryList.NeedDataSource Dim oCourses As New Course Dim oCourseInventory As New DataTable ' Dim a As Integer = rgCourseInventoryList.CurrentPageIndex If Not e.IsFromDetailTable Then 'andalso e.RebindReason <> GridRebindReason.InitialLoad Then If e.RebindReason <> GridRebindReason.InitialLoad Then oCourseInventory = oCourses.getCourseInventory(rcbAcademicUnit.SelectedValue, rcbCourseCategory.SelectedValue, IIf(cbShowDeleted.Checked, "Y", "N")) rgCourseInventoryList.DataSource = oCourseInventory End If End If End Sub ''' <summary> ''' If course is no longer offered then overstrike the course code and remove the delete icon ''' </summary> ''' <param name="source"></param> ''' <param name="e"></param> ''' <remarks></remarks> Protected Sub rgCourseInventory_ItemDataBound(ByVal source As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles rgCourseInventoryList.ItemDataBound Dim dataItem As GridDataItem Dim headerItem As GridHeaderItem If TypeOf (e.Item) Is GridDataItem AndAlso e.Item.OwnerTableView.Name = "CrossListView" Then dataItem = CType(e.Item, GridDataItem) If dataItem("SISCourseExpired").Text <> " " Then CType(dataItem("gbDeleteLink").Controls(0), ImageButton).Visible = False dataItem("SISCourseCode").Font.Strikeout = True End If e.Item.OwnerTableView.ShowHeader = False End If If TypeOf (e.Item) Is GridDataItem AndAlso e.Item.OwnerTableView.NamingContainer.ID = "rgCourseInventoryList" Then dataItem = CType(e.Item, GridDataItem) If dataItem("CourseExpired").Text <> " " Then CType(e.Item.FindControl("ibShowDeleteForm"), ImageButton).Visible = False dataItem("CourseCode").Font.Strikeout = True End If Dim a As String = e.Item.OwnerTableView.DataKeyValues(e.Item.ItemIndex)("CourseId") If dataItem("ParentId").Text <> " " Then CType(e.Item.FindControl("ibShowDeleteForm"), ImageButton).Visible = False CType(dataItem.FindControl("imgParent"), Image).ImageUrl = "../Images/Icons/lnk.png" CType(dataItem.FindControl("imgParent"), Image).Visible = True If dataItem("CourseExpired").Text <> " " Then CType(dataItem.FindControl("lblParentTitle"), Label).Text = "(" + dataItem("ParentId").Text + ")" CType(dataItem.FindControl("lblParentTitle"), Label).Font.Strikeout = True CType(dataItem.FindControl("lblCourseTitle"), Label).Text = "<br>" + dataItem("CourseTitle").Text Else CType(dataItem.FindControl("lblCourseTitle"), Label).Text = "(" + dataItem("ParentId").Text + ")" + "<br>" + dataItem("CourseTitle").Text End If Else CType(dataItem.FindControl("lblCourseTitle"), Label).Text = dataItem("CourseTitle").Text End If ElseIf TypeOf (e.Item) Is GridHeaderItem Then headerItem = CType(e.Item, GridHeaderItem) ' headerItem End If End Sub ''' <summary> ''' Take action depending on what type of item it is. ''' </summary> ''' <param name="source"></param>) ''' <param name="e"></param> ''' <remarks></remarks> Protected Sub rgCourseInventory_ItemCreated(ByVal source As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles rgCourseInventoryList.ItemCreated Dim courseId As String Dim rcb As New RadComboBox Dim oCourses As New Course If TypeOf e.Item Is GridEditFormItem And e.Item.IsInEditMode Then bindRadComboBox(CType(e.Item.FindControl("rcbCourseCategory"), RadComboBox), "CD_Course_Categories") bindRadComboBox(CType(e.Item.FindControl("rcbCourseType"), RadComboBox), "CD_Course_Types") bindRadComboBox(CType(e.Item.FindControl("rcbLanguage"), RadComboBox), "CD_Course_Languages") bindRadComboBox(CType(e.Item.FindControl("rcbAcademicUnit"), RadComboBox), "CD_Academic_Unit") ' Are we editing an existing row? If e.Item.ItemIndex >= 0 Then ' Then get the course details from the DB and bind the values to the list boxes. courseId = e.Item.OwnerTableView.DataKeyValues(e.Item.ItemIndex)("CourseId") oCourses.getCourseDetails(courseId) ' Hide the course code if we're editing. Only see it on a create. CType(e.Item.FindControl("trCourseCode"), TableRow).Visible = False CType(e.Item.FindControl("txtSISCourseCode"), TextBox).Text = oCourses.SISCourseCode CType(e.Item.FindControl("rcbCourseCategory"), RadComboBox).SelectedValue = oCourses.CourseCategoryId CType(e.Item.FindControl("rcbCourseType"), RadComboBox).SelectedValue = oCourses.CourseTypeId CType(e.Item.FindControl("rcbLanguage"), RadComboBox).SelectedValue = oCourses.CourseLanguageId CType(e.Item.FindControl("rcbAcademicUnit"), RadComboBox).SelectedValue = oCourses.AcademicUnitId CType(e.Item.FindControl("txtNumberOfSessions"), TextBox).Text = oCourses.NumberOfSessions CType(e.Item.FindControl("txtNote"), TextBox).Text = oCourses.Note If Not oCourses.CrossListCourseCode Is Nothing Then CType(e.Item.FindControl("trCrossListCourse"), TableRow).Visible = False End If End If ElseIf TypeOf e.Item Is GridDataItem Then If e.Item.OwnerTableView.NamingContainer.ID = "rgCourseInventoryList" Then Dim clr As String = e.Item.Style("backgroundColor") e.Item.Attributes.Add("onmouseover", "this.style.backgroundColor='lightsteelblue';this.style.cursor='hand';") e.Item.Attributes.Add("onmouseout", "this.style.backgroundColor='" & clr & "';this.style.cursor='';") Dim deleteForm As ImageButton = DirectCast(e.Item.FindControl("ibShowDeleteForm"), ImageButton) deleteForm.Attributes("onclick") = [String].Format("return ShowDeleteForm('{0}','{1}');", e.Item.OwnerTableView.DataKeyValues(e.Item.ItemIndex)("CourseId"), e.Item.ItemIndex) ElseIf e.Item.OwnerTableView.Name = "CrossListView" Then Dim clr As String = e.Item.Style("backgroundColor") e.Item.Attributes.Add("onmouseover", "this.style.backgroundColor='#cc99ff';this.style.cursor='hand';") e.Item.Attributes.Add("onmouseout", "this.style.backgroundColor='" & clr & "';this.style.cursor='';") End If End If If TypeOf e.Item Is GridDataItem Then End If End Sub ''' <summary> ''' Hide the empty rows in child gridview ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Protected Sub rgCourseInventoryList_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles rgCourseInventoryList.PreRender HideExpandColumnRecursive(rgCourseInventoryList.MasterTableView) End Sub ''' <summary> ''' Recursively loop through grid looking for empty chidren and suppress the "No records found message" and the row. ''' </summary> ''' <param name="tableView"></param> ''' <remarks></remarks> Private Sub HideExpandColumnRecursive(ByVal tableView As GridTableView) Dim nestedViewItems As GridItem() = tableView.GetItems(GridItemType.NestedView) For Each nestedViewItem As GridNestedViewItem In nestedViewItems For Each nestedView As GridTableView In nestedViewItem.NestedTableViews If nestedView.Items.Count = 0 Then Dim cell As TableCell = nestedView.ParentItem("ExpandColumn") cell.Controls(0).Visible = False nestedViewItem.Visible = False End If If nestedView.HasDetailTables Then HideExpandColumnRecursive(nestedView) End If Next Next End SubEnd ClassOption Strict OnImports System.DataImports uo.DataImports log4netImports uo.FacultyPortalImports uo.FacultyPortal.CommonImports System.GlobalizationImports System.Threading.ThreadImports System.TextPublic Class Course Public Function getCrossListedCourses(ByVal iCourseId As Integer, ByVal iShowDeleted As String) As DataTable Dim oCourseCrossList As DataSet Dim oGetCourseSchedule As XmlCallWrapper Try oGetCourseSchedule = XmlDatabase.CreateCallWrapper("FACULTYPORTAL", "PKG_COURSES.GET_CROSS_LISTED_COURSES_PRC") oGetCourseSchedule("PN_COURSE_ID") = iCourseId ' TODO need to get language id oGetCourseSchedule("PV_SHOW_EXPIRED") = iShowDeleted oGetCourseSchedule("PN_INTERFACE_LANG_ID") = 1 oGetCourseSchedule.Execute() oCourseCrossList = oGetCourseSchedule.GetDataSet oCourseCrossList.Tables("PC_RESULT").Columns(0).ColumnName = "ChildCourseId" oCourseCrossList.Tables("PC_RESULT").Columns(1).ColumnName = "SISCourseCode" oCourseCrossList.Tables("PC_RESULT").Columns(2).ColumnName = "SISCourseTitle" oCourseCrossList.Tables("PC_RESULT").Columns(3).ColumnName = "SISCourseExpired" Catch ex As Exception ' log error _logger.Error(ex) Finally End Try Return oCourseCrossList.Tables("PC_RESULT") End Function Public Function getCourseInventory(ByVal iAcademicUnit As Integer, ByVal iCourseCategory As Integer, ByVal iShowDeleted As String) As DataTable Dim oCourseSchedule As DataSet Dim oGetCourseSchedule As XmlCallWrapper Try oGetCourseSchedule = XmlDatabase.CreateCallWrapper("FACULTYPORTAL", "PKG_COURSES.GET_COURSES_BY_UNIT_PRC") oGetCourseSchedule("PN_ACADEMIC_UNIT_ID") = iAcademicUnit oGetCourseSchedule("PN_COURSE_CATEGORY_ID") = IIf(iCourseCategory = 0, DBNull.Value, iCourseCategory) oGetCourseSchedule("PV_SHOW_EXPIRED") = iShowDeleted ' TODO - Need to pass in or get the language oGetCourseSchedule("PN_INTERFACE_LANG_ID") = 1 oGetCourseSchedule.Execute() oCourseSchedule = oGetCourseSchedule.GetDataSet oCourseSchedule.Tables("PC_RESULT").Columns(0).ColumnName = "CourseId" oCourseSchedule.Tables("PC_RESULT").Columns(1).ColumnName = "SISCourseCode" oCourseSchedule.Tables("PC_RESULT").Columns(2).ColumnName = "SISCourseTitle" oCourseSchedule.Tables("PC_RESULT").Columns(3).ColumnName = "SISCourseNotes" oCourseSchedule.Tables("PC_RESULT").Columns(4).ColumnName = "SISCourseExpired" oCourseSchedule.Tables("PC_RESULT").Columns(5).ColumnName = "ParentId" Catch ex As Exception ' log error _logger.Error(ex) Finally End Try Return oCourseSchedule.Tables("PC_RESULT") End Function Public Sub getCourseDetails(ByVal iCourseId As Integer) Dim oCourseDetails As DataSet Dim oGetCourseDetails As XmlCallWrapper Try oGetCourseDetails = XmlDatabase.CreateCallWrapper("FACULTYPORTAL", "PKG_COURSES.GET_COURSE_DETAILS_PRC") oGetCourseDetails("PN_COURSE_ID") = iCourseId oGetCourseDetails.Execute() oCourseDetails = oGetCourseDetails.GetDataSet CourseCategoryId = CInt(oCourseDetails.Tables("PC_RESULT")(0).Item("COURSE_CATEGORY_ID")) CourseTypeId = CInt(oCourseDetails.Tables("PC_RESULT")(0).Item("COURSE_TYPE_ID")) CourseLanguageId = CInt(oCourseDetails.Tables("PC_RESULT")(0).Item("LANGUAGE_ID")) SISCourseCode = oCourseDetails.Tables("PC_RESULT")(0).Item("SIS_ACAD_ACT_CD").ToString AcademicUnitId = CInt(oCourseDetails.Tables("PC_RESULT")(0).Item("UNIT_ID")) NumberOfSessions = oCourseDetails.Tables("PC_RESULT")(0).Item("REG_SESSION_COUNT").ToString Note = oCourseDetails.Tables("PC_RESULT")(0).Item("NOTE").ToString CrossListCourseCode = CStr(oCourseDetails.Tables("PC_RESULT")(0).Item("CROSS_LIST_COURSE_ID")) Catch ex As Exception ' log error _logger.Error(ex) Finally End Try End SubEnd ClassAm trying to change old PdfViewer with Telerik control
This built as the following :
1. main Page (Attachment.aspx) load -> usercontrol (TransactionArchiving.ascx) //TransactionArchiving to deal with business
2. usercontrol (TransactionArchiving.ascx) load -> usercontrol (InboundArchive.ascx) //InboundArchive to deal with business
3. usercontrol (InboundArchive.ascx) load -> usercontrol (Archiving.ascx) //Archiving usercontrol should support different type of attachments and should dynamically load the attachment (PdfViewer ,TextArea, Templates, Word and .....) each type built into different usercontrol
On bellow HTML for Archiving usercontrol
<asp:Repeater ID="archivedTabs" runat="server" OnItemDataBound="archivedTabs_ItemDataBound"> <ItemTemplate> <div id='<%#this.ClientID + "_viewT" + Container.ItemIndex.ToString() %>' class="tabContainer noBorder"> <div class="col-sm-12 lntext-Hdr"> </div> <asp:HiddenField ID="hdnUniqueId" runat="server" /> <asp:HiddenField ID="hdnIndex" runat="server" Value='<%#Container.ItemIndex.ToString()%>' /> <asp:PlaceHolder ID="dynamicControlsPlaceHolder" runat="server"></asp:PlaceHolder> <div class="rowF noRowColor noBorder" style="text-align: center"> <div class="col8"> <asp:Button ID="saveBtn" OnClick="saveBtn_Click" OnClientClick="return true;" CssClass="btn btnGreen loadingData" runat="server" meta:resourcekey="saveBtn" /> <asp:Button ID="deleteBtn" CausesValidation="false" OnClick="deleteBtn_Click" OnClientClick="return true;" CssClass="btn btnGreen" runat="server" meta:resourcekey="deleteBtn" /> <asp:Button ID="sendBtn" CausesValidation="false" Visible="false" CssClass="btn btnGreen" runat="server" meta:resourcekey="sendBtn" /> <asp:Button runat="server" ID="eibtnBackToDirectorateTray" OnClick="eibtnBackToDirectorateTray_Click" Style="display: inline;" meta:resourcekey="eibtnBackToDirectorateTrayResource1" class="btn btnGreen" CausesValidation="false" /> <asp:Button runat="server" ID="eibtnBackToOutboundDraftTray" OnClick="eibtnBackToOutboundDraftTray_Click" Style="display: inline;" meta:resourcekey="eibtnBackToOutboundDraftTrayResource1" class="btn btnGreen" CausesValidation="false" /> </div> </div> </div> </ItemTemplate> </asp:Repeater>I think the issue cuz of repeater and PlaceHolder (dynamicControlsPlaceHolder)
This is the C# code for the same userControl
PlaceHolder dynamicControls = item.FindControl("dynamicControlsPlaceHolder") as PlaceHolder;PDFViewer ucPDFViewer = LoadControl("~/VIP/UserControls/ArchivingPDF/PDFViewer.ascx") as PDFViewer; ucPDFViewer.ID = "archivingControl_" + hdnUniqueId; ucPDFViewer.IsFromDirectorate = this.IsFromDirectorate; ucPDFViewer.CallDelete += new EventHandler(DeleteFromViewer); if (this.IsForManifest) { ucPDFViewer.loadManifest(record); } else { ucPDFViewer.loadData(record); } dynamicControls.Controls.Add(ucPDFViewer);
On bellow PDFViewer.ascx code
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.2.2/pdf.js"></script><%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %><link href='<%# Page.ResolveUrl("~/UserControls/ArchivingPDF/css/styles.css") %>' rel="stylesheet" /><%--<form id="form1" runat="server">--%> <%-- <telerik:RadScriptManager runat="server" ID="RadScriptManager1" />--%> <telerik:RadSkinManager ID="RadSkinManager1" runat="server" ShowChooser="true" /> <script type="text/javascript"> window.pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.2.2/pdf.worker.js'; function pageLoad(app, args) { var upload = $find('<%= RadAsyncUpload1.ClientID %>'); $(upload.get_element()).find("input[type='file']").attr("accept", ".docx, .rtf, .html, .txt, .xlsx, .csv"); } function fileUploaded(sender, args) { $find('<%= RadAjaxManager1.ClientID %>').ajaxRequest(); } </script> <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" EnablePageHeadUpdate="false"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="RadAjaxManager1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadAsyncUpload1" /> <telerik:AjaxUpdatedControl ControlID="RadPdfViewer1" LoadingPanelID="RadAjaxLoadingPanel1" /> <telerik:AjaxUpdatedControl ControlID="RadLabel1" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManager> <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server"> </telerik:RadAjaxLoadingPanel> <div class="demo-container size-wide" runat="server"> <telerik:RadAsyncUpload ID="RadAsyncUpload1" runat="server" OnClientFileUploaded="fileUploaded" OnFileUploaded="RadAsyncUpload1_FileUploaded" AllowedFileExtensions=".docx,.rtf,.html,.txt,.xlsx,.csv" HideFileInput="true" AutoAddFileInputs="false" Localization-Select="Upload And Convert" EnableInlineProgress="false" MultipleFileSelection="Disabled" /> <telerik:RadLabel ID="RadLabel1" runat="server" Text="Displayed Document: <b>Document.pdf</b>" Style="float: left;"> </telerik:RadLabel> <telerik:RadLabel ID="RadLabel2" runat="server" Text="Supported formats: <b>.docx / .rtf / .html / .txt / .xlsx / .csv</b>" Style="float: right;"> </telerik:RadLabel> <br /> <br /> <br /> <telerik:RadPdfViewer runat="server" ID="RadPdfViewer1" Height="600px" Width="100%" Scale="0.9"> <%--<PdfjsProcessingSettings File='<%# Page.ResolveUrl("~/EmptyText.txt") %>'></PdfjsProcessingSettings>--%> </telerik:RadPdfViewer> </div><%--</form>--%>
PdfViewer C# code
protected void Page_Load(object sender, EventArgs e){ int maxSize = 10 * 1024 * 1024; // 10MB RadAsyncUpload1.MaxFileSize = maxSize; RadPdfViewer1.MaxSerializerLength = maxSize; RadPdfViewer1.PdfjsProcessingSettings.File = Page.ResolveUrl("~/EmptyDoc.pdf");}protected void RadAsyncUpload1_FileUploaded(object sender, FileUploadedEventArgs e){ byte[] renderedBytes = null; string extention = Path.GetExtension(e.File.FileName); // RadFlow Documents if (Regex.IsMatch(extention, ".docx|.rtf|.html|.txt")) { IFormatProvider<RadFlowDocument> provider = null; RadFlowDocument document = null; switch (extention) { case ".docx": provider = new DocxFormatProvider(); break; case ".rtf": provider = new RtfFormatProvider(); break; case ".html": provider = new HtmlFormatProvider(); break; case ".txt": provider = new TxtFormatProvider(); break; default: provider = null; break; } document = provider.Import(e.File.InputStream); Telerik.Windows.Documents.Flow.FormatProviders.Pdf.PdfFormatProvider pdfProvider = new Telerik.Windows.Documents.Flow.FormatProviders.Pdf.PdfFormatProvider(); using (MemoryStream ms = new MemoryStream()) { pdfProvider.Export(document, ms); renderedBytes = ms.ToArray(); } } // Workbook Documents else if (Regex.IsMatch(extention, ".xlsx|.csv")) { IWorkbookFormatProvider provider = null; Workbook document = null; switch (extention) { case ".xlsx": provider = new XlsxFormatProvider(); break; case ".csv": provider = new CsvFormatProvider(); break; default: provider = null; break; } document = provider.Import(e.File.InputStream); Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf.PdfFormatProvider pdfProvider = new Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf.PdfFormatProvider(); using (MemoryStream ms = new MemoryStream()) { pdfProvider.Export(document, ms); renderedBytes = ms.ToArray(); } } RadLabel1.Text = "Displayed Document: <b>" + e.File.FileName + "</b>"; RadPdfViewer1.PdfjsProcessingSettings.FileSettings.Data = Convert.ToBase64String(renderedBytes);}
So the first image its the consol error (Capture01)
I have tried to update the code as the following (Capture02) // i think updated it wrong way
After code update (Capture03)
This is the first time for me to implement telerik controls and i could not find fully document for all features needed (Custom buttons, Add png to the attached like signature).

You can check your example :https://demos.telerik.com/aspnet-ajax/pdfviewer/applicationscenarios/dplintegration/defaultcs.aspx
This is my code:
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns='http://www.w3.org/1999/xhtml'><head runat="server"> <title>Telerik ASP.NET Example</title> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.2.2/pdf.js"></script> <link href="styles.css" rel="stylesheet" /></head><body> <form id="form1" runat="server"> <telerik:RadScriptManager runat="server" ID="RadScriptManager1" /> <telerik:RadSkinManager ID="RadSkinManager1" runat="server" ShowChooser="true" /> <script type="text/javascript"> window.pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.2.2/pdf.worker.js'; function pageLoad(app, args) { var upload = $find('<%= RadAsyncUpload1.ClientID %>'); $(upload.get_element()).find("input[type='file']").attr("accept", ".docx, .rtf, .html, .txt, .xlsx, .csv"); } function fileUploaded(sender, args) { $find('<%= RadAjaxManager1.ClientID %>').ajaxRequest(); } </script> <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" EnablePageHeadUpdate="false"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="RadAjaxManager1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadAsyncUpload1" /> <telerik:AjaxUpdatedControl ControlID="RadPdfViewer1" LoadingPanelID="RadAjaxLoadingPanel1" /> <telerik:AjaxUpdatedControl ControlID="RadLabel1" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManager> <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server"> </telerik:RadAjaxLoadingPanel> <div class="demo-container size-wide" runat="server"> <telerik:RadAsyncUpload ID="RadAsyncUpload1" runat="server" OnClientFileUploaded="fileUploaded" OnFileUploaded="RadAsyncUpload1_FileUploaded" AllowedFileExtensions=".docx,.rtf,.html,.txt,.xlsx,.csv" HideFileInput="true" AutoAddFileInputs="false" Localization-Select="Upload And Convert" EnableInlineProgress="false" MultipleFileSelection="Disabled" /> <telerik:RadLabel ID="RadLabel1" runat="server" Text="Displayed Document: <b>Document.pdf</b>" Style="float: left;"> </telerik:RadLabel> <telerik:RadLabel ID="RadLabel2" runat="server" Text="Supported formats: <b>.docx / .rtf / .html / .txt / .xlsx / .csv</b>" Style="float: right;"> </telerik:RadLabel> <br /> <br /> <br /> <div dir="ltr" runat="server"> <telerik:RadPdfViewer runat="server" ID="RadPdfViewer1" Height="550px" Width="100%" Scale="0.9" Skin="Default" RenderMode="Lightweight"> <%--<PdfjsProcessingSettings File="../../Document.pdf"></PdfjsProcessingSettings>--%> </telerik:RadPdfViewer> </div> </div> </form></body></html>
using System;using System.IO;using System.Text.RegularExpressions;using Telerik.Web.UI;using Telerik.Windows.Documents.Common.FormatProviders;using Telerik.Windows.Documents.Flow.FormatProviders.Docx;using Telerik.Windows.Documents.Flow.FormatProviders.Html;using Telerik.Windows.Documents.Flow.FormatProviders.Rtf;using Telerik.Windows.Documents.Flow.FormatProviders.Txt;using Telerik.Windows.Documents.Flow.Model;using Telerik.Windows.Documents.Spreadsheet.FormatProviders;using Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx;using Telerik.Windows.Documents.Spreadsheet.FormatProviders.TextBased.Csv;using Telerik.Windows.Documents.Spreadsheet.Model;namespace MCS.Web{ public partial class DefaultCS : BasePageClass { protected void Page_Load(object sender, EventArgs e) { int maxSize = 10 * 1024 * 1024; // 10MB RadAsyncUpload1.MaxFileSize = maxSize; RadPdfViewer1.MaxSerializerLength = maxSize; } protected void RadAsyncUpload1_FileUploaded(object sender, FileUploadedEventArgs e) { byte[] renderedBytes = null; string extention = Path.GetExtension(e.File.FileName); // RadFlow Documents if (Regex.IsMatch(extention, ".docx|.rtf|.html|.txt")) { IFormatProvider<RadFlowDocument> provider = null; RadFlowDocument document = null; switch (extention) { case ".docx": provider = new DocxFormatProvider(); break; case ".rtf": provider = new RtfFormatProvider(); break; case ".html": provider = new HtmlFormatProvider(); break; case ".txt": provider = new TxtFormatProvider(); break; default: provider = null; break; } document = provider.Import(e.File.InputStream); Telerik.Windows.Documents.Flow.FormatProviders.Pdf.PdfFormatProvider pdfProvider = new Telerik.Windows.Documents.Flow.FormatProviders.Pdf.PdfFormatProvider(); using (MemoryStream ms = new MemoryStream()) { pdfProvider.Export(document, ms); renderedBytes = ms.ToArray(); } } // Workbook Documents else if (Regex.IsMatch(extention, ".xlsx|.csv")) { IWorkbookFormatProvider provider = null; Workbook document = null; switch (extention) { case ".xlsx": provider = new XlsxFormatProvider(); break; case ".csv": provider = new CsvFormatProvider(); break; default: provider = null; break; } document = provider.Import(e.File.InputStream); Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf.PdfFormatProvider pdfProvider = new Telerik.Windows.Documents.Spreadsheet.FormatProviders.Pdf.PdfFormatProvider(); using (MemoryStream ms = new MemoryStream()) { pdfProvider.Export(document, ms); renderedBytes = ms.ToArray(); } } RadLabel1.Text = "Displayed Document: <b>" + e.File.FileName + "</b>"; RadPdfViewer1.PdfjsProcessingSettings.FileSettings.Data = Convert.ToBase64String(renderedBytes); } }}
<telerik:RadListView runat="server" ID="RadListView1" BorderColor="White" onitemdatabound="RadListView1_ItemDataBound" BorderStyle="None" AllowPaging="True"> <ClientSettings></ClientSettings> <ItemTemplate> <div style="border-bottom:1px solid gray;padding-left:15px;"> <table cellpadding="2px" cellspacing="2px" border="0"> <tr> <td class="LabelWidth" style="margin-left:2%; vertical-align:middle;font-family: Georgia,serif;"> <asp:Label ID="Label4" runat="server" Text='<%# (DataBinder.Eval(Container.DataItem,"PermissionItemName")) %>'></asp:Label> </td> <td> </td> <td valign="middle"> <asp:CheckBoxList ID="Listbox_Permission" CellSpacing="10" CellPadding="5" runat="server" RepeatDirection="Horizontal" CssClass="CheckboxList" AutoPostBack="false" > </asp:CheckBoxList> </td> </tr> </table> </div> </ItemTemplate> </telerik:RadListView>
Thanks,
Rahul
I need to manually select the first list matching item and turn it into a token.
Reading the documentation I think that the way to go would be within the example below:
var autoComplete = $find("<%= RadAutoCompleteBox1.ClientID %>");var newEntry = autoComplete.createEntry('Text', 'Value');var entries = autoComplete.get_entries();entries.add(newEntry);
However instead to create newEntry manually I need to capture the first item in the list that matches user typing (text and value). Any idea?
Thanks!
Hello,
my Telerik license has been renewed however when I logged in and try to download latest version it showing that I do not have license and cannot download any new version.
Please advise.
Thanks.
Vitaly.

I found an issue with the context menu. I tried in the demo to right click on an empty area/on a word and expects that the default context menu should show up with copy/paste etc... Only the native browser (Chrome 83) menu shows up. Shouldn't this work by default?
In my code i have been using this to add a custom menu, but it doesnt work due to the above issue i guess.
Is there any documentation how to add items for all tags, in the code below I use *, and seen other examples with BODY
MyRadEditor.EnsureToolsFileLoaded();var contextMenu = MyRadEditor.ContextMenus.FindByTagName("*");var editorTool = new EditorTool("Toolname");
editorTool.ShowIcon = false;
contextMenu.Tools.Add(editorTool);

RadGridComparableAnalysis.MasterTableView.AutoGeneratedColumns[columnCounter].ItemStyle.BackColor =
Color.White;
var grdColumns = new Array(masterTable.get_columns().length);
//Get all columns
grdColumns = masterTable.get_columns();
//Navigate to all columns and chage background color for the required columns
for (var columnCounter = 0; columnCounter < masterTable.get_columns().length; columnCounter++) {
var remainder = (columnCounter % 2);
if (remainder == 0) {
var grdColumn = grdColumns[columnCounter];
//masterTable.getColumnByUniqueName(grdColumn.get_uniqueName()).backColor = "Blue";
//masterTable.autoGeneratedColumns[columnCounter].itemStyle.iackColor = "Blue";
}
}
Thanks

is there a way to show the lightbox from code behind.
e.g. RadLightBox1.Show()
