cudreg-saml2/App_Code/Shared/BaseApplicationPage.vb
2025-06-08 16:22:20 +07:00

1268 lines
61 KiB
VB.net

Imports BaseClasses.Data
Imports BaseClasses.Utils.StringUtils
Imports BaseClasses.Utils
Imports BaseClasses.Resources
Imports Persons.Business
Imports Persons.Data
Imports BaseClasses.Web.UI
Imports System.Web.UI.DataVisualization.Charting
Namespace Persons.UI
' Typical customizations that may be done in this class include
' - adding custom event handlers
' - overriding base class methods
'
''' <summary>
''' The superclass (i.e. base class) for all Designer-generated pages in this application.
''' </summary>
''' <remarks>
''' <para>
''' </para>
''' </remarks>
Public Class BaseApplicationPage
Inherits BaseClasses.Web.UI.BasePage
Private _Enctype As String = ""
Public Property Enctype() As String
Get
Return Me._Enctype
End Get
Set(ByVal value As String)
Me._Enctype = value
End Set
End Property
Private Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreInit
Dim selectedTheme As String = Me.GetSelectedTheme()
If Not String.IsNullOrEmpty(selectedTheme) Then
Me.Page.Theme = selectedTheme
End If
End Sub
'Script to set focus to the last focused control
Private Const SCRIPT_DOFOCUS As String = "" & _
"<script language=""javascript"" type=""text/javascript"">" & _
"var ctrl = ""{ControlClientID}""; var ctrlPB = ""{CtrlIDToFocusOnPostBack}""; " & _
"function pageLoadedHandler1(sender, args) { " & _
"if(!isPostBack()) {setTimeout(""setTimeoutFocus()"", 1000);} " & _
"else {setTimeout(""setPostBackFocus()"", 100);}}" & _
"function setTimeoutFocus() { setFocus(ctrl); }" & _
"function setPostBackFocus() { doFocus(ctrlPB);}" & _
"function doFocus(ctrlID) { if((ctrlID == null) || (ctrlID == """")) return;" & _
"try { var objToFocus = null; try { objToFocus = document.getElementById(ctrlID); } catch(ex) {}" & _
"if(!(!objToFocus ||(objToFocus==null)||(objToFocus==""""))){objToFocus.focus();}} catch(ex){ }}" & _
"function isPostBack() {if (!document.getElementById(""{clientSideIsPostBack}"")) return false;" & _
"if (document.getElementById(""{clientSideIsPostBack}"").value == ""Y"") return true;" & _
"else return false;}" & _
"Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoadedHandler1);</script>"
'Add or remove controls if you do not want to retain focus on them
Public Sub LoadFocusScripts(ByVal CurrentControl As Control)
If TypeOf (CurrentControl) Is TextBox OrElse TypeOf (CurrentControl) Is DropDownList OrElse TypeOf (CurrentControl) Is ListBox OrElse _
TypeOf (CurrentControl) Is Button OrElse TypeOf (CurrentControl) Is ImageButton OrElse TypeOf (CurrentControl) Is RadioButtonList OrElse _
TypeOf (CurrentControl) Is RadioButton OrElse TypeOf (CurrentControl) Is LinkButton Then
DirectCast(CurrentControl, WebControl).Attributes.Add("onfocus", "try{document.getElementById(""__LASTFOCUS"").value=this.id;}catch(e){}")
End If
If CurrentControl.HasControls() Then
For Each CurrentChildControl As Control In CurrentControl.Controls
Me.LoadFocusScripts(CurrentChildControl)
Next
End If
End Sub
Public Overridable Sub SetFocusOnLoad()
Me.SetFocusOnLoad(Nothing)
End Sub
'''Sets focus to the control with ctrlClientID. If empty string is passed, sets focus to the first focusable control
Public Overridable Sub SetFocusOnLoad(ByVal currentControl As Control)
Dim ctrlClientID As String = ""
If currentControl IsNot Nothing Then
ctrlClientID = currentControl.ClientID
'currentControl.Focus()
End If
If Not ClientScript.IsStartupScriptRegistered(Page.GetType(), "SetFocusOnLoad") Then
Dim _clientSideIsPostBack As System.Web.UI.HtmlControls.HtmlInputHidden = DirectCast(Me.FindControlRecursively("_clientSideIsPostBack"), System.Web.UI.HtmlControls.HtmlInputHidden)
Dim _clientSideIsPostBackID As String = "_clientSideIsPostBack"
If Not _clientSideIsPostBack Is Nothing Then
_clientSideIsPostBackID = _clientSideIsPostBack.ClientID
End If
Dim script As String = SCRIPT_DOFOCUS
script = script.Replace("{ControlClientID}", ctrlClientID)
script = script.Replace("{clientSideIsPostBack}", _clientSideIsPostBackID)
Dim id As String = Request.Item("__LASTFOCUS")
If String.IsNullOrEmpty(id) Then
id = ""
End If
script = script.Replace("{CtrlIDToFocusOnPostBack}", id)
Dim sm As ScriptManager = ScriptManager.GetCurrent(Me.Page)
If sm.IsInAsyncPostBack Then
ScriptManager.RegisterClientScriptBlock(Me, Page.GetType(), "SetFocusOnPostback", script, False)
Else
ClientScript.RegisterStartupScript(Page.GetType(), "SetFocusOnLoad", script, False)
End If
End If
End Sub
'''Verifies that this is editable control
Public Overridable Function IsControlEditable(ByVal ctrl As Control, Optional ByVal includeCheckBox As Boolean = True) As Boolean
If TypeOf ctrl Is System.Web.UI.WebControls.TextBox OrElse _
TypeOf ctrl Is System.Web.UI.WebControls.DropDownList OrElse _
TypeOf ctrl Is System.Web.UI.WebControls.ListBox OrElse _
TypeOf ctrl Is System.Web.UI.WebControls.FileUpload Then
Return True
ElseIf includeCheckBox AndAlso TypeOf ctrl Is System.Web.UI.WebControls.CheckBox Then
Return True
End If
Return False
End Function
Public Overridable Function GetSelectedTheme() As String
'First try to get selected theme from Session
Dim Session As System.Web.SessionState.HttpSessionState = HttpContext.Current.Session
Dim selectedTheme As String = DirectCast(Session.Item(NetUtils.CookieSelectedTheme), String)
If Not String.IsNullOrEmpty(selectedTheme) Then
Return selectedTheme
End If
'There is no theme stored in session, possibly application is opened for the very first time.
'Try to get theme from the cookie
selectedTheme = BaseClasses.Utils.NetUtils.GetCookie(NetUtils.CookieSelectedTheme)
If Not String.IsNullOrEmpty(selectedTheme) Then
'make sure theme exists in application
Dim appDir As String = ""
Try
appDir = System.Web.HttpContext.Current.Server.MapPath("/")
If Not String.IsNullOrEmpty(appDir) Then appDir = appDir & "App_Themes"
Catch ex As Exception
End Try
If String.IsNullOrEmpty(appDir) Then
Try
appDir = System.Web.HttpContext.Current.Server.MapPath("")
If Not String.IsNullOrEmpty(appDir) Then
If Not System.IO.Directory.GetParent(appDir) Is Nothing Then
appDir = System.IO.Directory.GetParent(appDir).FullName & "\App_Themes"
ElseIf appDir.IndexOf("\") > 0 Then
appDir = appDir.Substring(0, appDir.LastIndexOf("\")) & "\App_Themes"
Else
appDir = ""
End If
End If
Catch ex As Exception
appDir = ""
End Try
End If
If Not String.IsNullOrEmpty(appDir) AndAlso System.IO.Directory.Exists(appDir) Then
If System.IO.Directory.Exists(System.IO.Path.Combine(appDir, selectedTheme)) Then
Session.Item(NetUtils.CookieSelectedTheme) = selectedTheme
Return selectedTheme
Else
BaseClasses.Utils.NetUtils.SetCookie(NetUtils.CookieSelectedTheme, "")
End If
End If
End If
Return ""
End Function
'Retrieve selected language from session or cookie
Public Overridable Function GetSelectedLanguage() As String
'First try to get selected language from Session
Dim Session As System.Web.SessionState.HttpSessionState = HttpContext.Current.Session
Dim selectedLanguage As String = DirectCast(Session("AppCultureUI"), String)
If Not String.IsNullOrEmpty(selectedLanguage) Then Return selectedLanguage
'There is no theme stored in session, possibly application is opened for the very first time.
'Try to get theme from the cookie
selectedLanguage = BaseClasses.Utils.NetUtils.GetCookie(NetUtils.CookieSelectedLanguage)
If Not String.IsNullOrEmpty(selectedLanguage) Then
Try
Dim culInfo As System.Globalization.CultureInfo = New System.Globalization.CultureInfo(selectedLanguage)
Session("AppCultureUI") = selectedLanguage
Return selectedLanguage
Catch
'if exception happened this language is not supported
BaseClasses.Utils.NetUtils.SetCookie(NetUtils.CookieSelectedLanguage, "")
selectedLanguage = System.Threading.Thread.CurrentThread.CurrentUICulture.Name
Session("AppCultureUI") = selectedLanguage
End Try
Else
selectedLanguage = System.Threading.Thread.CurrentThread.CurrentUICulture.Name
Session("AppCultureUI") = selectedLanguage
End If
Return selectedLanguage
End Function
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'commented out because DataBind is being called multiple times.
' If (Not Me.IsPostBack) Then
' Me.DataBind()
' End If
End Sub
' Variable used to prevent infinite loop
Private _modifyRedirectUrlInProgress As Boolean = False
' Constant used for EvaluateExpressions
Const PREFIX_NO_ENCODE As String = "NoUrlEncode:"
''' Allow for migration from earlier versions which did not have url encryption.
Public Overridable Function ModifyRedirectUrl(ByVal redirectUrl As String, ByVal redirectArgument As String) As String
Return EvaluateExpressions(redirectUrl, redirectArgument, False)
End Function
Public Overridable Function ModifyRedirectUrl(ByVal redirectUrl As String, ByVal redirectArgument As String, ByVal bEncrypt As Boolean) As String
Return EvaluateExpressions(redirectUrl, redirectArgument, bEncrypt)
End Function
Public Overridable Function EvaluateExpressions( _
ByVal redirectUrl As String, _
ByVal redirectArgument As String, _
ByVal bEncrypt As Boolean) As String
Return EvaluateExpressions(redirectUrl, redirectArgument, bEncrypt, Me)
End Function
Public Overridable Function EvaluateExpressions( _
ByVal redirectUrl As String, _
ByVal redirectArgument As String, _
ByVal bEncrypt As Boolean, _
ByVal targetCtl As Control) As String
If (_modifyRedirectUrlInProgress) Then
Return Nothing
Else
_modifyRedirectUrlInProgress = True
End If
Dim finalRedirectUrl As String = redirectUrl
Dim finalRedirectArgument As String = redirectArgument
Dim remainingUrl As String = finalRedirectUrl
' encrypt constant value
If bEncrypt AndAlso targetCtl.GetType() Is Page.GetType() Then
remainingUrl &= "&"
finalRedirectUrl &= "&"
While (remainingUrl.IndexOf("="c) >= 0) And (remainingUrl.IndexOf("&"c) > 0) And _
(remainingUrl.IndexOf("="c) < remainingUrl.IndexOf("&"c))
Dim leftIndex As Integer = remainingUrl.IndexOf("="c)
Dim rightIndex As Integer = remainingUrl.IndexOf("&"c)
Dim encryptFrom As String = remainingUrl.Substring(leftIndex + 1, rightIndex - leftIndex - 1)
remainingUrl = remainingUrl.Substring(rightIndex + 1)
If Not encryptFrom.StartsWith("{") OrElse Not encryptFrom.EndsWith("}") Then
' check if it is already encrypted
Dim isEncrypted As Boolean = False
Try
If Decrypt(encryptFrom) <> "" Then
isEncrypted = True
End If
Catch
End Try
' if not, process encryption
If Not isEncrypted Then
Dim encryptTo As String = DirectCast(Me.Page, BaseApplicationPage).Encrypt(DirectCast(encryptFrom, String))
finalRedirectUrl = finalRedirectUrl.Replace("=" & encryptFrom & "&", "=" & encryptTo & "&")
End If
End If
End While
finalRedirectUrl = finalRedirectUrl.Trim("&"c)
End If
If (finalRedirectUrl Is Nothing OrElse finalRedirectUrl.Trim = "") Then
Return ""
ElseIf (finalRedirectUrl.IndexOf("{"c) < 0) Then
'RedirectUrl does not contain any format specifiers
_modifyRedirectUrlInProgress = False
Return finalRedirectUrl
Else
'The old way was to pass separate URL and arguments and use String.Format to
'do the replacement. Example:
' URL: EditProductsRecord?Products={0}
' Argument: PK
'The new way to is pass the arguments directly in the URL. Example:
' URL: EditProductsRecord?Products={PK}
'If the old way is passsed, convert it to the new way.
If (Len(redirectArgument) > 0) Then
Dim arguments() As String = Split(redirectArgument, ",")
Dim i As Integer
For i = 0 To (arguments.Length - 1)
finalRedirectUrl = finalRedirectUrl.Replace("{" & i.ToString & "}", "{" & arguments(i) & "}")
Next
finalRedirectArgument = ""
End If
'First find all the table and record controls in the page.
Dim controlList As New ArrayList()
GetAllRecordAndTableControls(targetCtl, controlList, True)
If controlList.Count = 0 Then
Return finalRedirectUrl
End If
' Store the controls in a hashtable using the control unique name
' as the key for easy refrence later in the function.
Dim controlIdList As New Hashtable
Dim control As System.Web.UI.Control
Dim found As Boolean = False
For Each control In controlList
Dim uID As String = control.UniqueID
Dim pageContentIndex As Integer = uID.IndexOf("$PageContent$")
If pageContentIndex > 0 Then
If found = False Then
'Remove all controls without $PageContent$ prefix, because this page is used with Master Page
'and these entries are irrelevant
controlIdList.Clear()
End If
found = True
End If
If found Then
'If we found that Master Page is used for this page construction than disregard all controls
'without $PageContent$ prefix
If pageContentIndex > 0 Then
uID = uID.Substring(pageContentIndex + "$PageContent$".Length)
controlIdList.Add(uID, control)
End If
Else
'No Master Page presense found so far
controlIdList.Add(uID, control)
End If
Next
'Look at all of the expressions in the URL and forward processing
'to the appropriate controls.
'Expressions can be of the form [ControlName:][NoUrlEncode:]Key[:Value]
Dim forwardTo As New ArrayList
remainingUrl = finalRedirectUrl
While (remainingUrl.IndexOf("{"c) >= 0) And (remainingUrl.IndexOf("}"c) > 0) And _
(remainingUrl.IndexOf("{"c) < remainingUrl.IndexOf("}"c))
Dim leftIndex As Integer = remainingUrl.IndexOf("{"c)
Dim rightIndex As Integer = remainingUrl.IndexOf("}"c)
Dim expression As String = remainingUrl.Substring(leftIndex + 1, rightIndex - leftIndex - 1)
remainingUrl = remainingUrl.Substring(rightIndex + 1)
Dim prefix As String = Nothing
If (expression.IndexOf(":") > 0) Then
prefix = expression.Substring(0, expression.IndexOf(":"))
End If
If (Not IsNothing(prefix)) AndAlso (prefix.Length > 0) AndAlso _
(Not (InvariantLCase(prefix) = InvariantLCase(PREFIX_NO_ENCODE))) AndAlso _
(Not BaseRecord.IsKnownExpressionPrefix(prefix)) Then
'The prefix is a control name. Add it to the list of controls that
'need to process the URL.
If (controlIdList.Contains(prefix)) And (Not forwardTo.Contains(prefix)) Then
forwardTo.Add(prefix)
End If
End If
End While
'Forward the request to each control in the forwardTo list
Dim containerId As String
For Each containerId In forwardTo
Dim ctl As Control = CType(controlIdList.Item(containerId), Control)
If (Not IsNothing(ctl)) Then
If TypeOf ctl Is BaseApplicationRecordControl Then
finalRedirectUrl = DirectCast(ctl, BaseApplicationRecordControl).EvaluateExpressions(finalRedirectUrl, finalRedirectArgument, bEncrypt)
ElseIf TypeOf ctl Is BaseApplicationTableControl Then
finalRedirectUrl = DirectCast(ctl, BaseApplicationTableControl).EvaluateExpressions(finalRedirectUrl, finalRedirectArgument, bEncrypt)
End If
End If
Next
'If there are any unresolved expressions, let the other naming containers
'have a crack at modifying the URL
For Each control In controlList
If (forwardTo.IndexOf(control.ID) < 0) Then
If TypeOf control Is BaseApplicationRecordControl Then
finalRedirectUrl = DirectCast(control, BaseApplicationRecordControl).EvaluateExpressions(finalRedirectUrl, finalRedirectArgument, bEncrypt)
ElseIf TypeOf control Is BaseApplicationTableControl Then
finalRedirectUrl = DirectCast(control, BaseApplicationTableControl).EvaluateExpressions(finalRedirectUrl, finalRedirectArgument, bEncrypt)
End If
End If
Next
End If
_modifyRedirectUrlInProgress = False
Return finalRedirectUrl
End Function
Private Sub GetAllRecordAndTableControls(ByVal ctl As Control, ByVal controlList As ArrayList, ByVal withParents As Boolean)
If ctl Is Nothing Then
Return
End If
GetAllRecordAndTableControls(ctl, controlList)
If withParents Then
Dim parent As Control = ctl.Parent
While parent IsNot Nothing
If TypeOf (parent) Is BaseApplicationRecordControl OrElse TypeOf (parent) Is BaseApplicationTableControl Then
controlList.Add(parent)
End If
parent = parent.Parent
End While
End If
End Sub
Private Function GetAllRecordAndTableControls() As ArrayList
Dim controlList As ArrayList = New ArrayList()
GetAllRecordAndTableControls(Me, controlList)
Return controlList
End Function
Private Sub GetAllRecordAndTableControls(ByVal ctl As Control, ByVal controlList As ArrayList)
If ctl Is Nothing Then
Return
End If
If TypeOf ctl Is BaseApplicationRecordControl OrElse _
TypeOf ctl Is BaseApplicationTableControl Then
controlList.Add(ctl)
End If
Dim nextCtl As Control
For Each nextCtl In ctl.Controls()
GetAllRecordAndTableControls(nextCtl, controlList)
Next
End Sub
Public Function GetResourceValue(ByVal keyVal As String, ByVal appName As String) As String
Return AppResources.GetResourceValue(keyVal, appName)
End Function
Public Function GetResourceValue(ByVal keyVal As String) As String
Return AppResources.GetResourceValue(keyVal, Nothing)
End Function
Public Function ExpandResourceValue(ByVal keyVal As String) As String
Return AppResources.ExpandResourceValue(keyVal)
End Function
''' -----------------------------------------------------------------------------
''' <summary>
''' Register Control buttonCtrl with ScriptManager to perform traditional postback instead of default async postback
''' </summary>
''' <remarks>
''' </remarks>
''' <history>
''' [sramarao] 3/2007 Created
''' </history>
''' -----------------------------------------------------------------------------
Public Sub RegisterPostBackTrigger(ByVal buttonCtrl As System.Web.UI.Control, ByVal updatePanelCtrl As System.Web.UI.Control)
Try
' Get current ScriptManager
Dim scriptMgr As ScriptManager = ScriptManager.GetCurrent(Me.Page)
' If Scriptmanager not preset return.
If scriptMgr Is Nothing Then
Return
End If
' If buttonCtrl is not surrounded by an UpdatePanel then return.
Dim CurrentUpdatePanel As System.Web.UI.UpdatePanel = CType(updatePanelCtrl, UpdatePanel)
If CurrentUpdatePanel Is Nothing Then
Return
End If
If buttonCtrl Is Nothing Then
Return
End If
scriptMgr.RegisterPostBackControl(buttonCtrl)
Catch ex As Exception
Throw ex
End Try
End Sub
Public Sub RegisterPostBackTrigger(ByVal buttonCtrl As System.Web.UI.Control)
Try
' Get current ScriptManager
Dim scriptMgr As ScriptManager = ScriptManager.GetCurrent(Me.Page)
' If Scriptmanager not preset return.
If scriptMgr Is Nothing Then
Return
End If
If buttonCtrl Is Nothing Then
Return
End If
scriptMgr.RegisterPostBackControl(buttonCtrl)
Catch ex As Exception
Throw ex
End Try
End Sub
Public Overridable Sub SaveData()
End Sub
Public Overridable Sub SetChartControl(ByVal chartCtrlName As String)
End Sub
#Region " Methods to manage saving and retrieving control values to session. "
Private _ShouldSaveControlsToSession As Boolean = False
Public Property ShouldSaveControlsToSession() As Boolean
Get
Return Me._ShouldSaveControlsToSession
End Get
Set(ByVal value As Boolean)
Me._ShouldSaveControlsToSession = value
End Set
End Property
Protected Sub Page_SaveControls_Unload(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Unload
If Me.ShouldSaveControlsToSession Then
Me.SaveControlsToSession()
End If
End Sub
Protected Overridable Sub SaveControlsToSession()
End Sub
Protected Sub Control_ClearControls_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.PreRender
Me.ClearControlsFromSession()
End Sub
Protected Overridable Sub ClearControlsFromSession()
End Sub
Public Sub SaveToSession( _
ByVal control As Control, _
ByVal value As String)
SaveToSession(control.UniqueID, value)
End Sub
Public Function GetFromSession( _
ByVal control As Control, _
ByVal defaultValue As String) As String
Return GetFromSession(control.UniqueID, defaultValue)
End Function
Public Function GetFromSession(ByVal control As Control) As String
Return GetFromSession(control.UniqueID, Nothing)
End Function
Public Sub RemoveFromSession(ByVal control As Control)
RemoveFromSession(control.UniqueID)
End Sub
Public Function InSession(ByVal control As Control) As Boolean
Return InSession(control.UniqueID)
End Function
Public Sub SaveToSession( _
ByVal control As Control, _
ByVal variable As String, _
ByVal value As String)
SaveToSession(control.UniqueID & variable, value)
End Sub
Public Function GetFromSession( _
ByVal control As Control, _
ByVal variable As String, _
ByVal defaultValue As String) As String
Return GetFromSession(control.UniqueID & variable, defaultValue)
End Function
Public Sub RemoveFromSession( _
ByVal control As Control, _
ByVal variable As String)
RemoveFromSession(control.UniqueID & variable)
End Sub
Public Function InSession( _
ByVal control As Control, _
ByVal variable As String) As Boolean
Return InSession(control.UniqueID & variable)
End Function
Public Sub SaveToSession( _
ByVal name As String, _
ByVal value As String)
Me.Session()(GetValueKey(name)) = value
End Sub
Public Function GetFromSession( _
ByVal name As String, _
ByVal defaultValue As String) As String
Dim value As String = CType(Me.Session()(GetValueKey(name)), String)
If value Is Nothing OrElse value.Trim() = "" Then
value = defaultValue
End If
Return value
End Function
Public Function GetFromSession(ByVal name As String) As String
Return GetFromSession(name, Nothing)
End Function
Public Sub RemoveFromSession(ByVal name As String)
Me.Session.Remove(GetValueKey(name))
End Sub
Public Function InSession(ByVal name As String) As Boolean
Return (Not Me.Session(GetValueKey(name)) Is Nothing)
End Function
Public Function GetValueKey(ByVal name As String) As String
Return Me.Session.SessionID & Me.AppRelativeVirtualPath & name
End Function
#End Region
#Region " Methods to encrypt and decrypt URL parameters "
' The URLEncryptionKey is specified in the web.config. The rightmost three characters of the current
' Session Id are concatenated with the URLEncryptionKey to provide added protection. You can change
' this to anything you like by changing this function for the application.
' This function is private and not overridable because each page cannot have its own key - it must
' be common across the entire application.
Public Overridable Function Encrypt(ByVal Source As String, Optional ByVal includeSession As Boolean = True) As String
Dim CheckCrypto As Crypto = New Crypto(Crypto.Providers.DES)
Return CheckCrypto.Encrypt(Source, includeSession)
End Function
Public Overridable Function Decrypt(ByVal Source As String, Optional ByVal includeSession As Boolean = True) As String
Dim CheckCrypto As Crypto = New Crypto(Crypto.Providers.DES)
Return CheckCrypto.Decrypt(Source, includeSession)
End Function
' Encrypt url parameter which is enclosed in {}. For eg:..\Shared\SelectFileToImport?TableName=Employees
Public Function EncryptUrlParameter(ByVal url As String) As String
If (url Is Nothing) Then
Return ""
End If
If ((url.IndexOf(Microsoft.VisualBasic.ChrW(61)) > 0)) Then
Dim queryString() As String = url.Split(Microsoft.VisualBasic.ChrW(61))
Dim expression As String = queryString(1)
Dim encryptedValue As String = Encrypt(expression)
url = url.Replace(expression, encryptedValue)
End If
Return url
End Function
#End Region
#Region "Import Wizard methods"
Public Overridable Function GetPreviousURL() As String
Me.RemoveCurrentRequestFromSessionNavigationHistory()
Dim snh As BaseClasses.Web.SessionNavigationHistory = Me.GetSessionNavigationHistory()
Dim prevUrl As String = Nothing
Dim toRemoveRequest As Boolean = False
If Not snh Is Nothing Then
Dim prevRequest As BaseClasses.Web.SessionNavigationHistory.RequestInfo = snh.GetCurrentRequest()
If (Not IsNothing(prevRequest)) Then
If (InvariantUCase(Me.Request.Url.PathAndQuery) <> InvariantUCase(prevRequest._Url.PathAndQuery)) Then
'If it is different than the current URL, redirect to the previous request's URL
toRemoveRequest = True
prevUrl = prevRequest._Url.PathAndQuery
ElseIf ((Not IsNothing(prevRequest._UrlReferrer)) AndAlso _
(InvariantUCase(Me.Request.Url.PathAndQuery) <> InvariantUCase(prevRequest._UrlReferrer.PathAndQuery))) Then
'ElseIf it is different than the current URL, redirect to the previous request's URLReferrer
toRemoveRequest = True
prevUrl = prevRequest._UrlReferrer.PathAndQuery
End If
End If
End If
If String.IsNullOrEmpty(prevUrl) Then
prevUrl = BaseClasses.Configuration.ApplicationSettings.Current.DefaultPageUrl
End If
Return prevUrl
End Function
#End Region
#Region "Chart control initialization"
Public Const PIE As String = "Pie"
Public Const LINE As String = "Line"
Public Const BAR As String = "Bar"
Public Const COLUMN As String = "Column"
Public Const LabelInsideBar As String = "Label inside bar"
Public Const ValueAtBarEnd As String = "Value at bar end"
Public Const NothingInside As String = "Nothing"
''' <summary>
''' Creates chart control based on the passed parameters
''' </summary>
''' <param name="barThickness"> How thick the bar or column</param>
''' <param name="chartType">Bar, Column, Pie or Line</param>
''' <param name="usePalette">If true - uses Palette, otherwise - single color. For Pie chart palette is used regardless of this parameter</param>
''' <param name="palette">One of the palette in Windows.Forms.DataVisualization.ChartColorPalette </param>
''' <param name="color">One of the colors in Drawing.Color. Used for the bars, columns, or line</param>
''' <param name="fontFamily">One of the font familie as defined in Drawinf.FontFamily (string)</param>
''' <param name="fontColor">color of the font used for all texts - labels and values (from Drawing.color)</param>
''' <param name="backGroundColor">Background on the chart area. From Drawing.Color</param>
''' <param name="gridColor">The color used on all grid lines and markers. From Drawing.Color</param>
''' <param name="title">Title of the chart</param>
''' <param name="indexAxisTitle">Title on the Axis with labels</param>
''' <param name="valueAxisTitle">Title on the axis with values</param>
''' <param name="indexArray">Array of labels (String)</param>
''' <param name="valueArray">Array of values (Decimal)</param>
''' <param name="labelAngle">If 0, label on the X axis is shown horizontally, if negative, it is tilted counter clock wize, if positive,
''' tilted colck wise. Could be from -90 to 90. (degrees)</param>
''' <param name="customProperties">Added to custom properties to series. To the list of supported properties refer to
''' http://msdn.microsoft.com/en-us/library/dd456764.aspx</param>
''' <remarks></remarks>
Public Overridable Sub InitializeChartControl(ByVal chartControl As Chart, _
ByVal indexArray() As String, _
ByVal valueArray() As Decimal, _
ByVal barThickness As Integer, _
ByVal chartType As String, _
ByVal usePalette As Boolean, _
ByVal palette As ChartColorPalette, _
ByVal color As Drawing.Color, _
ByVal backGroundColor As System.Drawing.Color, _
ByVal gridColor As System.Drawing.Color, _
ByVal fontFamily As String, _
ByVal fontColor As System.Drawing.Color, _
ByVal internalLabelColor As System.Drawing.Color, _
ByVal showInsideBar As String, _
ByVal title As String, _
ByVal indexAxisTitle As String, _
ByVal valueAxisTitle As String, _
ByVal labelAngle As Integer, _
ByVal generatePercentage As Boolean, _
ByVal labelFormat As String, _
ByVal customProperties As String)
Dim args As New System.Collections.Generic.List(Of Object)
args.Add(chartControl)
args.Add(indexArray)
args.Add(valueArray)
args.Add(Nothing)
args.Add(Nothing)
args.Add(barThickness)
args.Add(chartType)
args.Add(usePalette)
args.Add(palette)
args.Add(color)
args.Add(backGroundColor)
args.Add(gridColor)
args.Add(fontFamily)
args.Add(fontColor)
args.Add(internalLabelColor)
args.Add(showInsideBar)
args.Add(title)
args.Add(indexAxisTitle)
args.Add(valueAxisTitle)
args.Add(labelAngle)
args.Add(generatePercentage)
args.Add(labelFormat)
args.Add("")
args.Add("")
args.Add("")
args.Add("")
args.Add("")
args.Add(customProperties)
InitializeChartControl(args.ToArray())
End Sub
''' <summary>
''' Creates chart control based on the passed parameters
''' </summary>
''' <param name="args"> parameters to initialize the chart
''' http://msdn.microsoft.com/en-us/library/dd456764.aspx</param>
''' <remarks>chart control or Nothing</remarks>
Public Overridable Sub InitializeChartControl(ByVal args() As Object)
Dim chartControl As Chart = Nothing
Dim indexArray() As String = Nothing
Dim valueArray() As Decimal = Nothing
Dim legendURLArray() As String = Nothing
Dim dataPointURLArray() As String = Nothing
Dim barThickness As Integer = 3
Dim chartType As String = Nothing
Dim usePalette As Boolean = False
Dim palette As ChartColorPalette = ChartColorPalette.None
Dim color As Drawing.Color = Drawing.Color.White
Dim backGroundColor As System.Drawing.Color = Drawing.Color.White
Dim gridColor As System.Drawing.Color = Drawing.Color.Black
Dim fontFamily As String = Nothing
Dim fontColor As System.Drawing.Color = Drawing.Color.Black
Dim internalLabelColor As System.Drawing.Color = Drawing.Color.Black
Dim showInsideBar As String = ""
Dim title As String = ""
Dim indexAxisTitle As String = ""
Dim valueAxisTitle As String = ""
Dim labelAngle As Integer = 0
Dim generatePercentage As Boolean = False
Dim labelFormat As String = Nothing
Dim chartTitleFontSize As String = ""
Dim axisTitleFontSize As String = ""
Dim scaleFontSize As String = ""
Dim labelInsideFontSize As String = ""
Dim customProperties As String = ""
If args.Length > 0 AndAlso args(0) IsNot Nothing Then
chartControl = DirectCast(args(0), Chart)
End If
If args.Length > 1 AndAlso args(1) IsNot Nothing Then
indexArray = DirectCast(args(1), String())
End If
If args.Length > 2 AndAlso args(2) IsNot Nothing Then
valueArray = DirectCast(args(2), Decimal())
End If
If args.Length > 3 AndAlso args(3) IsNot Nothing Then
legendURLArray = DirectCast(args(3), String())
End If
If args.Length > 4 AndAlso args(4) IsNot Nothing Then
dataPointURLArray = DirectCast(args(4), String())
End If
If args.Length > 5 AndAlso args(5) IsNot Nothing Then
barThickness = DirectCast(args(5), Integer)
End If
If args.Length > 6 AndAlso args(6) IsNot Nothing Then
chartType = DirectCast(args(6), String)
End If
If args.Length > 7 AndAlso args(7) IsNot Nothing Then
usePalette = DirectCast(args(7), Boolean)
End If
If args.Length > 8 AndAlso args(8) IsNot Nothing Then
palette = DirectCast(args(8), ChartColorPalette)
End If
If args.Length > 9 AndAlso args(9) IsNot Nothing Then
color = DirectCast(args(9), Drawing.Color)
End If
If args.Length > 10 AndAlso args(10) IsNot Nothing Then
backGroundColor = DirectCast(args(10), Drawing.Color)
End If
If args.Length > 11 AndAlso args(11) IsNot Nothing Then
gridColor = DirectCast(args(11), Drawing.Color)
End If
If args.Length > 12 AndAlso args(12) IsNot Nothing Then
fontFamily = DirectCast(args(12), String)
End If
If args.Length > 13 AndAlso args(13) IsNot Nothing Then
fontColor = DirectCast(args(13), Drawing.Color)
End If
If args.Length > 14 AndAlso args(14) IsNot Nothing Then
internalLabelColor = DirectCast(args(14), Drawing.Color)
End If
If args.Length > 15 AndAlso args(15) IsNot Nothing Then
showInsideBar = DirectCast(args(15), String)
End If
If args.Length > 16 AndAlso args(16) IsNot Nothing Then
title = DirectCast(args(16), String)
End If
If args.Length > 17 AndAlso args(17) IsNot Nothing Then
indexAxisTitle = DirectCast(args(17), String)
End If
If args.Length > 18 AndAlso args(18) IsNot Nothing Then
valueAxisTitle = DirectCast(args(18), String)
End If
If args.Length > 19 AndAlso args(19) IsNot Nothing Then
labelAngle = DirectCast(args(19), Integer)
End If
If args.Length > 20 AndAlso args(20) IsNot Nothing Then
generatePercentage = DirectCast(args(20), Boolean)
End If
If args.Length > 21 AndAlso args(21) IsNot Nothing Then
labelFormat = DirectCast(args(21), String)
End If
If args.Length > 22 AndAlso args(22) IsNot Nothing Then
chartTitleFontSize = DirectCast(args(22), String)
End If
If args.Length > 23 AndAlso args(23) IsNot Nothing Then
axisTitleFontSize = DirectCast(args(23), String)
End If
If args.Length > 24 AndAlso args(24) IsNot Nothing Then
scaleFontSize = DirectCast(args(24), String)
End If
If args.Length > 25 AndAlso args(25) IsNot Nothing Then
labelInsideFontSize = DirectCast(args(25), String)
End If
If args.Length > 26 AndAlso args(26) IsNot Nothing Then
customProperties = DirectCast(args(26), String)
End If
'Add chart area to the control
Dim baseChartAreaName As String = "ChartArea"
Dim chartAreaName As String = "ChartArea1"
If Not chartControl.ChartAreas Is Nothing AndAlso chartControl.ChartAreas.Count > 0 Then
Dim suffix As Integer = 1
Dim found As Boolean = True
While found AndAlso suffix < 100
chartAreaName = baseChartAreaName & suffix.ToString()
found = False
For Each ca As ChartArea In chartControl.ChartAreas
If ca.Name = chartAreaName Then
found = True
suffix += 1
Exit For
End If
Next
End While
If found Then Return
End If
Dim chartArea As ChartArea = chartControl.ChartAreas.Add(chartAreaName)
chartArea.AxisX.TitleForeColor = fontColor
chartArea.AxisY.TitleForeColor = fontColor
chartArea.AxisX.TitleFont = New System.Drawing.Font(fontFamily, If(Integer.TryParse(chartTitleFontSize, 0), Integer.Parse(axisTitleFontSize), chartArea.AxisX.TitleFont.Size))
chartArea.AxisY.TitleFont = New System.Drawing.Font(fontFamily, If(Integer.TryParse(chartTitleFontSize, 0), Integer.Parse(axisTitleFontSize), chartArea.AxisY.TitleFont.Size))
chartArea.AxisY.IsLabelAutoFit = True
chartArea.AxisX.IsLabelAutoFit = False
chartArea.AxisX.Interval = 1
chartArea.AxisX.MajorGrid.LineColor = System.Drawing.Color.LightGray
chartArea.AxisY.MajorGrid.LineColor = System.Drawing.Color.LightGray
chartArea.AxisX.LabelStyle.ForeColor = fontColor
chartArea.AxisY.LabelStyle.ForeColor = fontColor
chartArea.AxisX.LabelStyle.Font = New System.Drawing.Font(fontFamily, If(Integer.TryParse(scaleFontSize, 0), Integer.Parse(scaleFontSize), chartArea.AxisX.LabelStyle.Font.Size))
chartArea.AxisX.LineColor = gridColor
chartArea.AxisY.LineColor = gridColor
chartArea.AxisX.MajorTickMark.LineColor = gridColor
chartArea.AxisY.MajorTickMark.LineColor = gridColor
chartArea.AxisX.LabelStyle.Enabled = True
chartArea.AxisY.LabelStyle.Enabled = True
chartArea.AxisX.Title = indexAxisTitle
chartArea.AxisY.Title = valueAxisTitle
chartArea.AxisY.LabelStyle.Format = labelFormat
If generatePercentage Then
chartArea.AxisY.LabelStyle.Format = "0%"
End If
chartArea.AxisY.LabelStyle.Font = New System.Drawing.Font(fontFamily, If(Integer.TryParse(scaleFontSize, 0), Integer.Parse(scaleFontSize), chartArea.AxisY.LabelStyle.Font.Size))
chartArea.BackColor = backGroundColor
'Now add Series
Dim baseSeriesName As String = "Series"
Dim seriesName As String = "Series1"
If Not chartControl.Series Is Nothing AndAlso chartControl.Series.Count > 0 Then
Dim suffix As Integer = 1
Dim found As Boolean = True
While found AndAlso suffix < 100
seriesName = baseSeriesName & suffix.ToString()
found = False
For Each s As Series In chartControl.Series
If s.Name = seriesName Then
found = True
suffix += 1
Exit For
End If
Next
End While
If found Then Return
End If
Dim series As Series = chartControl.Series.Add(seriesName)
series.ChartArea = chartAreaName
chartControl.Series(seriesName).Points.Clear()
chartControl.Series(seriesName).BackGradientStyle = GradientStyle.None
chartControl.Series(seriesName).BackHatchStyle = ChartHatchStyle.None
chartControl.Series(seriesName).Font = New System.Drawing.Font(fontFamily, 6)
chartControl.Series(seriesName).LabelForeColor = fontColor
chartControl.Series(seriesName).SmartLabelStyle.AllowOutsidePlotArea = LabelOutsidePlotAreaStyle.Yes
chartControl.AntiAliasing = AntiAliasingStyles.All
If usePalette OrElse chartType = PIE Then
chartControl.Series(seriesName).Palette = palette
Else
chartControl.Series(seriesName).Color = color
End If
Dim baseTitleName As String = "Title"
Dim TitleName As String = "Title1"
If Not chartControl.Titles Is Nothing AndAlso chartControl.Titles.Count > 0 Then
Dim suffix As Integer = 1
Dim found As Boolean = True
While found AndAlso suffix < 100
TitleName = baseTitleName & suffix.ToString()
found = False
For Each t As Title In chartControl.Titles
If t.Name = TitleName Then
found = True
suffix += 1
Exit For
End If
Next
End While
If found Then Return
End If
Dim titleIndex As Integer = chartControl.Titles.Count - 1
chartControl.Titles.Add(TitleName).Text = title
titleIndex += 1
chartControl.Titles(titleIndex).ForeColor = fontColor
chartControl.Titles(titleIndex).Font = New System.Drawing.Font(fontFamily, If(Integer.TryParse(chartTitleFontSize, 0), Integer.Parse(chartTitleFontSize), chartArea.AxisY.TitleFont.Size))
Dim dataSet As New System.Data.DataSet()
Dim seriesTable As New System.Data.DataTable()
Dim cProperties As String = customProperties
seriesTable.Columns.Add(New System.Data.DataColumn("X", GetType(String)))
If (labelFormat = "0") Then
seriesTable.Columns.Add(New System.Data.DataColumn("Y", GetType(Integer)))
Else
seriesTable.Columns.Add(New System.Data.DataColumn("Y", GetType(Double)))
End If
'Append cProperties with some style qualifiers
If Not cProperties.ToLower.Contains("DrawingStyle".ToLower) Then
If Not String.IsNullOrEmpty(cProperties) AndAlso Not cProperties.EndsWith(",") Then cProperties &= ","
cProperties &= "DrawingStyle = Emboss"
End If
If String.Equals(showInsideBar, LabelInsideBar, StringComparison.InvariantCultureIgnoreCase) AndAlso _
chartType <> PIE Then
If Not cProperties.ToLower.Contains("BarLabelStyle".ToLower) Then
If Not String.IsNullOrEmpty(cProperties) AndAlso Not cProperties.EndsWith(",") Then cProperties &= ","
cProperties &= "BarLabelStyle = Center"
End If
End If
If chartType = PIE Then
If showInsideBar = ValueAtBarEnd Then
If Not cProperties.ToLower.Contains("PieLabelStyle".ToLower) Then
If Not String.IsNullOrEmpty(cProperties) AndAlso Not cProperties.EndsWith(",") Then cProperties &= ","
cProperties &= "PieLabelStyle = Outside"
End If
Else
If Not cProperties.ToLower.Contains("PieLabelStyle".ToLower) Then
If Not String.IsNullOrEmpty(cProperties) AndAlso Not cProperties.EndsWith(",") Then cProperties &= ","
cProperties &= "PieLabelStyle = Inside"
End If
End If
If Not cProperties.ToLower.Contains("PieDrawingStyle".ToLower) Then
If Not String.IsNullOrEmpty(cProperties) AndAlso Not cProperties.EndsWith(",") Then cProperties &= ","
cProperties &= "PieDrawingStyle = Concave"
End If
End If
Select Case chartType
Case BAR
chartArea.AxisY.LabelStyle.Angle = labelAngle
series.ChartType = SeriesChartType.Bar
If Not cProperties.ToLower.Contains("PixelPointWidth".ToLower) Then
Dim barWidth As String = "PixelPointWidth = " & barThickness
If Not String.IsNullOrEmpty(cProperties) AndAlso Not cProperties.EndsWith(",") Then cProperties &= ","
cProperties &= barWidth
End If
Case COLUMN
chartArea.AxisX.LabelStyle.Angle = labelAngle
series.ChartType = SeriesChartType.Column
If Not cProperties.ToLower.Contains("PixelPointWidth".ToLower) Then
Dim barWidth As String = "PixelPointWidth = " & barThickness
If Not String.IsNullOrEmpty(cProperties) AndAlso Not cProperties.EndsWith(",") Then cProperties &= ","
cProperties &= barWidth
End If
Case LINE
chartArea.AxisX.LabelStyle.Angle = labelAngle
series.ChartType = SeriesChartType.Line
Case PIE
chartControl.Series(seriesName).BorderColor = System.Drawing.Color.LightGray
chartControl.Series(seriesName).BorderWidth = 1
series.ChartType = SeriesChartType.Pie
'Construct Legend
Dim baseLegendName As String = "Legend"
Dim legendName As String = "Legend1"
If Not chartControl.Legends Is Nothing AndAlso chartControl.Legends.Count > 0 Then
Dim suffix As Integer = 1
Dim found As Boolean = True
While found AndAlso suffix < 100
legendName = baseLegendName & suffix.ToString()
found = False
For Each l As Legend In chartControl.Legends
If l.Name = legendName Then
found = True
suffix += 1
Exit For
End If
Next
End While
If found Then Return
End If
Dim legend As System.Web.UI.DataVisualization.Charting.Legend = chartControl.Legends.Add(legendName)
legend.Title = indexAxisTitle
legend.ForeColor = fontColor
legend.TitleFont = New System.Drawing.Font(fontFamily, If(Integer.TryParse(axisTitleFontSize, 0), Integer.Parse(axisTitleFontSize), legend.TitleFont.Size))
legend.Font = New System.Drawing.Font(fontFamily, If(Integer.TryParse(scaleFontSize, 0), Integer.Parse(scaleFontSize), legend.Font.Size))
legend.TitleForeColor = chartArea.AxisX.TitleForeColor
End Select
chartControl.Series(seriesName).CustomProperties = cProperties
'Sanity check for label and value arrays. They should not be empty
If indexArray Is Nothing OrElse valueArray Is Nothing Then
Return
End If
'Add data to data table. For Bar chart add them in the reversed order
Dim dimention As Integer = indexArray.Length - 1
If dimention > valueArray.Length - 1 Then dimention = valueArray.Length - 1
If chartType = BAR Then
For i As Integer = dimention To 0 Step -1
seriesTable.Rows.Add(New Object() {indexArray(i), Convert.ToDouble(valueArray(i))})
Next
If legendURLArray IsNot Nothing AndAlso legendURLArray.Length > 0 Then
Array.Reverse(legendURLArray)
End If
If dataPointURLArray IsNot Nothing AndAlso dataPointURLArray.Length > 0 Then
Array.Reverse(dataPointURLArray)
End If
Else
For i As Integer = 0 To dimention
seriesTable.Rows.Add(New Object() {indexArray(i), Convert.ToDouble(valueArray(i))})
Next
End If
dataSet.Tables.Add(seriesTable)
series.BorderWidth = 2
chartControl.Series(seriesName).XValueMember = "X"
chartControl.Series(seriesName).YValueMembers = "Y"
chartControl.DataSource = dataSet
If chartControl.DataSource Is Nothing Then
Return
Else
chartControl.DataBind()
End If
'now when data bound to the chart, change some properties on particular elements (data points) of series
If chartType = PIE Then
For Each dp As DataPoint In chartControl.Series(seriesName).Points
If showInsideBar = ValueAtBarEnd Then
dp.LabelForeColor = fontColor
Else
dp.LabelForeColor = internalLabelColor
End If
Dim value As Double = dp.YValues(0)
dp.Label = value.ToString(labelFormat)
If Not String.IsNullOrEmpty(dp.AxisLabel) Then
dp.LegendText = "#AXISLABEL"
Else
dp.LegendText = " "
End If
Next
For i As Integer = 0 To chartControl.Series(seriesName).Points.Count - 1
Dim dp As DataPoint = chartControl.Series(seriesName).Points(i)
If legendURLArray IsNot Nothing AndAlso i < legendURLArray.Length Then
dp.LegendUrl = legendURLArray(i)
dp.LegendMapAreaAttributes = "target=""_blank"""
End If
If dataPointURLArray IsNot Nothing AndAlso i < dataPointURLArray.Length Then
dp.Url = dataPointURLArray(i)
dp.MapAreaAttributes = "target=""_blank"""
End If
dp.Font = New System.Drawing.Font(fontFamily, If(Integer.TryParse(scaleFontSize, 0), Integer.Parse(scaleFontSize), dp.Font.Size))
Next
Else
If showInsideBar = ValueAtBarEnd Then
' find out the largest value to be shown
Dim largestValInChart As Decimal = Decimal.MinValue
For Each v As Decimal In valueArray
If largestValInChart < v Then
largestValInChart = v
End If
Next
For Each dp As DataPoint In chartControl.Series(seriesName).Points
dp.MarkerStyle = MarkerStyle.None
Dim value As Double = dp.YValues(0)
dp.Label = value.ToString(labelFormat)
dp.LabelForeColor = fontColor
dp.CustomProperties = "BarLabelStyle = Outside"
' for small value, show the label outside
' for large value, show the label inside
If chartType = BAR AndAlso (largestValInChart / 2) < value Then
dp.LabelForeColor = internalLabelColor
dp.CustomProperties = "BarLabelStyle = Right"
End If
Next
ElseIf showInsideBar = LabelInsideBar Then
If chartControl.Series(seriesName).Points.Count = indexArray.Length Then
Dim index As Integer = 0
Dim increment As Integer = 1
Dim lColor As Drawing.Color = fontColor
chartArea.AxisX.LabelStyle.Enabled = False
If chartType = BAR Then
lColor = internalLabelColor
index = indexArray.Length - 1
increment = -1
End If
For Each dp As DataPoint In chartControl.Series(seriesName).Points
dp.MarkerStyle = MarkerStyle.None
dp.CustomProperties = "BarLabelStyle = Center"
dp.LabelForeColor = lColor
dp.Label = indexArray(index)
index += increment
Next
End If
End If
For i As Integer = 0 To chartControl.Series(seriesName).Points.Count - 1
Dim dp As DataPoint = chartControl.Series(seriesName).Points(i)
If String.IsNullOrEmpty(dp.AxisLabel) Then
dp.AxisLabel = " "
End If
If legendURLArray IsNot Nothing AndAlso i < legendURLArray.Length Then
dp.LegendUrl = legendURLArray(i)
dp.LegendMapAreaAttributes = "target=""_blank"""
End If
If dataPointURLArray IsNot Nothing AndAlso i < dataPointURLArray.Length Then
dp.Url = dataPointURLArray(i)
dp.MapAreaAttributes = "target=""_blank"""
End If
dp.Font = New System.Drawing.Font(fontFamily, If(Integer.TryParse(labelInsideFontSize, 0), Integer.Parse(labelInsideFontSize), dp.Font.Size))
Next
End If
End Sub
#End Region
End Class
End Namespace