I am trying to implement a solution based around the Load On Demand example for the tabstrip. I have 4 tabs, and each tab contains a grid. I have configured the grid which is loaded in the first initial tab with some events in ItemDataBound. But when I click one of the other tabs, and then click back to the first tab the events which happend in ItemDataBound is gone. And to get them back I need to trigger an event which rebinds the grid. Am I missing something here? Should I do the events in the ItemDataBound somewhere else?
ASPX file:
Codebehind:
ASCX file:
ASCX codebehind:
Some method and irrelevant code has been removed, but that code has no effect on the grid or anything else. afAccessLayer.ExecProcedure is a custom written method of executing stored procedures, so is everything else called using afAccessLayer. But they basicly do the same as regular calls, so they dont affect the result given.
Any help in locating what's removing the images which was added in ItemDataBound is appreciated.
Thanks,
Trygve
ASPX file:
<%@ Page Language="VB" AutoEventWireup="true" CodeFile="DefaultStartUpPage.aspx.vb" Inherits="DefaultStartUpPage" %> |
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %> |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head runat="server"> |
<title>MyPims</title> |
</head> |
<body> |
<form runat="server" id="mainForm" method="post" style="width: 100%"> |
<telerik:RadScriptManager ID="RadScriptManager1" runat="server"> |
</telerik:RadScriptManager> |
<telerik:RadAjaxLoadingPanel runat="server" ID="LoadingPanel1"> |
<asp:Image runat="server" ID="LoadingImage1" ImageUrl="Images\Loading.gif" AlternateText="Loading..." /> |
</telerik:RadAjaxLoadingPanel> |
<telerik:RadAjaxManager runat="server" ID="RadAjaxManager1" EnableAJAX="true" OnAjaxRequest="RadAjaxManager1_AjaxRequest"> |
<AjaxSettings> |
<telerik:AjaxSetting AjaxControlID="RadTabStrip1"> |
<UpdatedControls> |
<telerik:AjaxUpdatedControl ControlID="RadTabStrip1" /> |
<telerik:AjaxUpdatedControl ControlID="RadMultiPage1" LoadingPanelID="LoadingPanel1" /> |
</UpdatedControls> |
</telerik:AjaxSetting> |
<telerik:AjaxSetting AjaxControlID="RadMultiPage1"> |
<UpdatedControls> |
<telerik:AjaxUpdatedControl ControlID="RadMultiPage1" /> |
</UpdatedControls> |
</telerik:AjaxSetting> |
<telerik:AjaxSetting AjaxControlID="RadAjaxManager1"> |
<UpdatedControls> |
<telerik:AjaxUpdatedControl ControlID="RadTabStrip1" /> |
<telerik:AjaxUpdatedControl ControlID="RadMultiPage1" /> |
</UpdatedControls> |
</telerik:AjaxSetting> |
</AjaxSettings> |
</telerik:RadAjaxManager> |
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> |
<script type="text/javascript"> |
function onTabSelecting(sender, args) { |
if (args.get_tab().get_pageViewID()) { |
args.get_tab().set_postBack(false); |
} |
} |
function pageLoad() { |
loadNextPageView(); |
} |
function loadNextPageView() { |
$find("RadAjaxManager1").ajaxRequest($find("RadMultiPage1").get_pageViews().get_count()); |
} |
</script> |
</telerik:RadCodeBlock> |
<div> |
<telerik:RadTabStrip OnClientTabSelecting="onTabSelecting" ID="RadTabStrip1" SelectedIndex="0" Skin="Inox" |
runat="server" MultiPageID="RadMultiPage1" OnTabClick="RadTabStrip1_TabClick"> |
</telerik:RadTabStrip> |
<telerik:RadMultiPage ID="RadMultiPage1" Width="100%" Height="500px" runat="server" SelectedIndex="0" OnPageViewCreated="RadMultiPage1_PageViewCreated"> |
</telerik:RadMultiPage> |
<input id="cCurrentDomain" type="text" runat="server" style="display:none"/> |
</div> |
</form> |
</body> |
</html> |
Codebehind:
Imports System |
Imports Telerik.Web.UI |
Imports Appframe3.Common.Data |
Imports Appframe3.Web.Common |
Partial Class DefaultStartUpPage |
Inherits System.Web.UI.Page |
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) |
If Not Page.IsPostBack Then |
AddTab("MyActions") |
'AddPageView(RadTabStrip1.FindTabByText("My Actions")) |
AddPageView(RadTabStrip1.FindTabByText("MyActions")) |
AddTab("MyResponsibilities") |
'AddPageView("MyResponsibilities") |
AddTab("MyRisks") |
'AddPageView("MyRisks") |
AddTab("MyStatistics") |
'AddPageView("MyStatistics") |
SetCurDomain() |
End If |
End Sub |
Private Sub SetCurDomain() |
Dim vRecordSource As New afRecordSource |
vRecordSource.ViewName = "stbv_System_Users" |
vRecordSource.SelectColumns.Add("CurrentDomain") |
vRecordSource.WhereClause = "Login = SUSER_SNAME()" |
Dim vCurDomain As String = afAccessLayer.GetDataScalar(vRecordSource).ToString() |
cCurrentDomain.Value = vCurDomain |
End Sub |
Private Sub AddTab(ByVal tabName As String) |
Dim tab As RadTab = New RadTab |
tab.Text = tabName |
tab.Style.Add("font-weight", "bold") |
RadTabStrip1.Tabs.Add(tab) |
End Sub |
Protected Sub RadMultiPage1_PageViewCreated(ByVal sender As Object, ByVal e As RadMultiPageEventArgs) 'Handles RadMultiPage1.PageViewCreated |
Dim userControlName As String = e.PageView.ID & ".ascx" |
Dim userControl As Control = Page.LoadControl(userControlName) |
userControl.ID = e.PageView.ID & "_userControl" |
e.PageView.Controls.Add(userControl) |
End Sub |
Private Sub AddPageView(ByVal tab As RadTab) |
Dim pageView As RadPageView = New RadPageView |
pageView.ID = tab.Text |
RadMultiPage1.PageViews.Add(pageView) |
tab.PageViewID = pageView.ID |
End Sub |
Protected Sub RadTabStrip1_TabClick(ByVal sender As Object, ByVal e As RadTabStripEventArgs) 'Handles RadTabStrip1.TabClick |
AddPageView(e.Tab) |
e.Tab.PageView.Selected = True |
End Sub |
Protected Sub RadAjaxManager1_AjaxRequest(ByVal sender As Object, ByVal e As AjaxRequestEventArgs) |
Dim pageView As Integer = Convert.ToInt32(e.Argument) |
AddPageView(RadTabStrip1.Tabs(pageView)) |
If pageView < RadTabStrip1.Tabs.Count - 1 Then |
RadAjaxManager1.ResponseScripts.Add("loadNextPageView()") |
End If |
End Sub |
End Class |
ASCX file:
<%@ Control Language="VB" AutoEventWireup="true" CodeFile="MyActions.ascx.vb" Inherits="MyActions" %> |
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %> |
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" EnableAJAX="true"> |
<AjaxSettings> |
<telerik:AjaxSetting AjaxControlID="RadGrid1"> |
<UpdatedControls> |
<telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" /> |
<telerik:AjaxUpdatedControl ControlID="cShow" /> |
<telerik:AjaxUpdatedControl ControlID="cSearchForText" /> |
<telerik:AjaxUpdatedControl ControlID="cSearchForBtn" /> |
</UpdatedControls> |
</telerik:AjaxSetting> |
<telerik:AjaxSetting AjaxControlID="cShow"> |
<UpdatedControls> |
<telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" /> |
<telerik:AjaxUpdatedControl ControlID="cShow" /> |
<telerik:AjaxUpdatedControl ControlID="cSearchForText" /> |
<telerik:AjaxUpdatedControl ControlID="cSearchForBtn" /> |
</UpdatedControls> |
</telerik:AjaxSetting> |
<telerik:AjaxSetting AjaxControlID="cSearchForBtn"> |
<UpdatedControls> |
<telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" /> |
<telerik:AjaxUpdatedControl ControlID="cShow" /> |
<telerik:AjaxUpdatedControl ControlID="cSearchForText" /> |
<telerik:AjaxUpdatedControl ControlID="cSearchForBtn" /> |
</UpdatedControls> |
</telerik:AjaxSetting> |
<telerik:AjaxSetting AjaxControlID="cSearchForText"> |
<UpdatedControls> |
<telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" /> |
<telerik:AjaxUpdatedControl ControlID="cShow" /> |
<telerik:AjaxUpdatedControl ControlID="cSearchForText" /> |
<telerik:AjaxUpdatedControl ControlID="cSearchForBtn" /> |
</UpdatedControls> |
</telerik:AjaxSetting> |
</AjaxSettings> |
</telerik:RadAjaxManager> |
<telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Height="75px" |
Width="75px" Transparency="20"> |
<img alt="Loading..." src='Images\Loading.gif' style="border: 0;" /> |
</telerik:RadAjaxLoadingPanel> |
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> |
<script type="text/javascript"> |
function RowDblClick(sender, eventArgs) { |
var grid = $find("<%=RadGrid1.ClientID %>"); |
var MasterTable = grid.get_masterTableView(); |
var vElementNo; |
var vRevision = "01"; |
var vDomain; |
var vCurrentDomain; |
var selectedRows = MasterTable.get_selectedItems(); |
for (var i = 0; i < selectedRows.length; i++) { |
var row = selectedRows[i]; |
vElementNo = MasterTable.getCellByColumnUniqueName(row, "ElementNo") |
vDomain = MasterTable.getCellByColumnUniqueName(row, "Domain") |
//here ElementNo.innerHTML / Domain.innerHTML holds the value of the cell |
} |
if (vDomain.innerHTML != document.getElementById('cCurrentDomain').innerHTML) { |
} |
else |
{ |
} |
} |
</script> |
</telerik:RadCodeBlock> |
<table style="width: 90%; height: 100%;"> |
<tr> |
<td> |
<table style="height:40px"> |
<tr> |
<td style="width: 10px"> |
Show: |
</td> |
<td style="width: 150px"> |
<asp:DropDownList AutoPostBack="true" OnSelectedIndexChanged="cShow_SelectedIndexChanged" |
ID="cShow" runat="server" Width="150px"> |
<asp:ListItem Value="0" Selected="True">Ready for sign</asp:ListItem> |
<asp:ListItem Value="1">Not ready for sign</asp:ListItem> |
<asp:ListItem Value="2">All responsibilities</asp:ListItem> |
<asp:ListItem Value="3">Completed Actions</asp:ListItem> |
<%--<asp:ListItem Value="4">Originated Actions</asp:ListItem>--%> |
</asp:DropDownList> |
</td> |
<td style="width:10px"></td> |
<td style="width: 60px"> |
Filter For: |
</td> |
<td style="width: 200px"> |
<telerik:RadTextBox ID="cSearchForText" Width="200px" runat="server" Skin="Office2007" AutoPostBack="true" OnTextChanged="RadTextBox1_TextChanged"> |
</telerik:RadTextBox> |
</td> |
<td style="width: 50px"> |
<asp:Button ID="cSearchForBtn" runat="server" Text="Search" OnClick="cSearchForBtn_Click" /> |
</td> |
<td style="width:10px"></td> |
<td style="width:440px"> |
<table style="height: 20px; font-family: Arial; font-size: 8pt"> |
<tr> |
<td style="width: 16px;"> |
<img src="Images/arrow_right.gif" alt="Overdue" /></td> |
<td style="width: 75px;"> |
Next To Sign</td> |
<td style="width: 10px"> |
</td> |
<td style="width: 16px;"> |
<img src="Images/bubble_red.jpg" alt="Overdue" /></td> |
<td style="width: 45px;"> |
Overdue</td> |
<td style="width: 10px"> |
</td> |
<td style="width: 16px;"> |
<img src="Images/bubble_orange.jpg" alt="DueWithin3Days" /></td> |
<td style="width: 110px;"> |
Due within 3 days</td> |
<td style="width: 10px"> |
</td> |
<td style="width: 16px;"> |
<img src="Images/bubble_green.jpg" alt="WithinAcceptableLimits" /></td> |
<td style="width: 120px;"> |
Within acceptable limits</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
<tr> |
<td> |
<telerik:RadGrid ID="RadGrid1" AllowSorting="true" AllowMultiColumnSorting="true" |
ShowStatusBar="true" Skin="Office2007" ShowFooter="True" GridLines="None" AllowPaging="false" |
PageSize="50" runat="server" Height="500px"> |
<HeaderContextMenu Skin="Office2007" EnableTheming="True"> |
<CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation> |
</HeaderContextMenu> |
<PagerStyle Mode="NumericPages" /> |
<SortingSettings SortedBackColor="Azure" /> |
<MasterTableView> |
<RowIndicatorColumn> |
<HeaderStyle Width="20px"></HeaderStyle> |
</RowIndicatorColumn> |
<ExpandCollapseColumn> |
<HeaderStyle Width="20px"></HeaderStyle> |
</ExpandCollapseColumn> |
</MasterTableView> |
<SelectedItemStyle BackColor="#CCCCCC" /> |
<ClientSettings> |
<Scrolling AllowScroll="True" UseStaticHeaders="True" SaveScrollPosition="True"> |
</Scrolling> |
<Selecting AllowRowSelect="true" /> |
<ClientEvents OnRowDblClick="RowDblClick" /> |
</ClientSettings> |
<FilterMenu Skin="Office2007" EnableTheming="True"> |
<CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation> |
</FilterMenu> |
</telerik:RadGrid> |
</td> |
</tr> |
<input id="hdnCurrentDomain" type="text" runat="server" style="display:none" /> |
</table> |
ASCX codebehind:
Imports System |
Imports System.Data |
Imports System.Configuration |
Imports System.Collections |
Imports System.Web |
Imports System.Web.Security |
Imports System.Web.UI |
Imports System.Web.UI.WebControls |
Imports System.Web.UI.WebControls.WebParts |
Imports System.Web.UI.HtmlControls |
Imports System.Xml |
Imports System.Text |
Imports Appframe3.Common.Data |
Imports Appframe3.Web.Common |
Imports Telerik.Web.UI |
Partial Class MyActions |
Inherits System.Web.UI.UserControl |
Private Const gMaxDays As Integer = 999999 |
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) |
SetDomainSettings() |
RadGrid1.Columns.Clear() |
GetElements() |
End Sub |
Private Sub SetDomainSettings() |
End Sub |
Private Sub GetElements() |
Dim vRecSrc As New afRecordSource("sviw_System_GetDomainName") |
vRecSrc.SelectColumns.Add("DomainName") |
Dim vDomain As String = afAccessLayer.GetDataScalar(vRecSrc).ToString().ToUpper() |
Dim vOrderBy As String |
Dim vDataTable As DataTable |
Dim vProcedure As New afProcedureCall |
vProcedure.ProcedureName = "astp_Changes_MissingActions" |
vDataTable = afAccessLayer.ExecProcedure(vProcedure).Tables(0) |
vOrderBy = "NextToSign DESC, NumberDays ASC, ElementNo, Title" |
Dim vSearchText As String = "" |
vSearchText = "ISNULL(Domain,'') + ISNULL(ElementNo,'') + ISNULL(Title,'') + ISNULL(Priority,'') + ISNULL(DisplayColumnName,'') Like '%" + cSearchForText.Text.Trim + "%'" |
If cShow.SelectedValue <> "4" And cShow.SelectedValue <> "3" Then |
vSearchText += " AND " |
If cShow.SelectedValue = "0" Then |
vSearchText += "NextToSign=1 AND Display = 1" |
ElseIf cShow.SelectedValue = "1" Then |
vSearchText += "NextToSign IS NULL AND Display = 1" |
ElseIf cShow.SelectedValue = "2" Then |
vSearchText += "Display = 1" |
End If |
End If |
For Each vR As DataRow In vDataTable.Rows |
If vR.IsNull("NumberDays") Then |
vR("NumberDays") = gMaxDays |
End If |
Next |
RadGrid1.AutoGenerateColumns = False |
RadGrid1.DataSource = vDataTable.[Select](vSearchText, vOrderBy) |
RadGrid1.Width = Unit.Pixel(960) |
'RadGrid1.Height = Unit.Percentage(100) |
Dim vColumnImage As New GridTemplateColumn |
RadGrid1.Columns.Add(vColumnImage) |
vColumnImage.UniqueName = "ImgColumn" |
vColumnImage.HeaderText = "" |
vColumnImage.ItemStyle.Width = Unit.Pixel(10) |
Dim vColumn As New GridBoundColumn |
RadGrid1.Columns.Add(vColumn) |
vColumn.DataField = "Domain" |
vColumn.HeaderText = "Domain" |
vColumn.UniqueName = "Domain" |
vColumn.AllowSorting = True |
vColumn.ItemStyle.Width = Unit.Pixel(40) |
vColumn = New GridBoundColumn |
RadGrid1.Columns.Add(vColumn) |
vColumn.DataField = "NextToSign" |
vColumn.HeaderText = "" |
vColumn.UniqueName = "NextToSign" |
vColumn.Visible = False |
vColumn = New GridBoundColumn |
RadGrid1.Columns.Add(vColumn) |
vColumn.DataField = "ElementNo" |
vColumn.HeaderText = "Action No" |
vColumn.UniqueName = "ElementNo" |
vColumn.AllowSorting = True |
vColumn.ItemStyle.Width = Unit.Pixel(150) |
vColumn = New GridBoundColumn |
RadGrid1.Columns.Add(vColumn) |
vColumn.DataField = "Revision" |
vColumn.HeaderText = "Rev" |
vColumn.AllowSorting = True |
vColumn.ItemStyle.Width = Unit.Pixel(20) |
vColumn = New GridBoundColumn |
RadGrid1.Columns.Add(vColumn) |
vColumn.DataField = "Title" |
vColumn.HeaderText = "Title" |
vColumn.AllowSorting = True |
vColumn.ItemStyle.Width = Unit.Pixel(250) |
vColumn = New GridBoundColumn |
RadGrid1.Columns.Add(vColumn) |
vColumn.DataField = "Priority" |
vColumn.HeaderText = "Priority" |
vColumn.AllowSorting = True |
vColumn.ItemStyle.Width = Unit.Pixel(50) |
vColumn = New GridBoundColumn |
RadGrid1.Columns.Add(vColumn) |
vColumn.DataField = "DueDate" |
vColumn.HeaderText = "Due Date" |
vColumn.AllowSorting = True |
vColumn.ItemStyle.Width = Unit.Pixel(50) |
vColumn.DataFormatString = "{0:d}" |
vColumn = New GridBoundColumn |
RadGrid1.Columns.Add(vColumn) |
vColumn.DataField = "NumberDays" |
vColumn.HeaderText = "" |
vColumn.UniqueName = "NumberDays" |
vColumn.AllowSorting = True |
vColumn.ItemStyle.Width = Unit.Pixel(50) |
vColumnImage = New GridTemplateColumn |
RadGrid1.Columns.Add(vColumnImage) |
vColumnImage.UniqueName = "ColorColumn" |
vColumnImage.HeaderText = "" |
vColumnImage.ItemStyle.Width = Unit.Pixel(10) |
vColumn = New GridBoundColumn |
RadGrid1.Columns.Add(vColumn) |
vColumn.DataField = "DisplayColumnName" |
vColumn.UniqueName = "DisplayColumnName" |
vColumn.HeaderText = "Action Responsibility" |
vColumn.AllowSorting = True |
vColumn.Aggregate = GridAggregateFunction.Count |
vColumn.FooterText = "Total Actions: " |
vColumn.ItemStyle.Width = Unit.Pixel(75) |
End Sub |
Protected Sub RadGrid1_ItemDataBound(ByVal sender As Object, ByVal e As GridItemEventArgs) Handles RadGrid1.ItemDataBound |
If TypeOf e.Item Is GridDataItem Then |
Dim item As GridDataItem = TryCast(e.Item, GridDataItem) |
If item("NextToSign").Text = "True" Then |
Dim img As New Image() |
img.ID = "Image1" |
img.ImageUrl = "Images/arrow_right.gif" |
item("ImgColumn").Controls.Add(img) |
End If |
' Add coloring for items. |
Dim dataBoundItem As GridDataItem = e.Item |
Dim imgRed As New Image() |
imgRed.ID = "ImageRed" |
imgRed.ImageUrl = "Images/bubble_red.jpg" |
Dim imgOrange As New Image() |
imgOrange.ID = "ImageOrange" |
imgOrange.ImageUrl = "Images/bubble_orange.jpg" |
Dim imgGreen As New Image() |
imgGreen.ID = "ImageGreen" |
imgGreen.ImageUrl = "Images/bubble_green.jpg" |
'Days left |
Dim vDaysLeft As String = "" |
Dim vDays As Int32 = Integer.Parse(dataBoundItem("NumberDays").Text) |
If vDays < gMaxDays Then |
vDaysLeft = vDays.ToString() |
Else |
vDaysLeft = "N/A" |
End If |
If vDays < 0 Then |
item("ColorColumn").Controls.Add(imgRed) |
ElseIf vDays < 4 Then |
item("ColorColumn").Controls.Add(imgOrange) |
ElseIf cShow.SelectedValue = "3" Or dataBoundItem("DisplayColumnName").Text = "Action Closed" Or dataBoundItem("DisplayColumnName").Text = "VOID" Or dataBoundItem("DisplayColumnName").Text = "Info" Then |
'do nothing |
Else |
item("ColorColumn").Controls.Add(imgGreen) |
End If |
dataBoundItem("NumberDays").Text = vDaysLeft |
End If |
End Sub |
Private Sub RadGrid1_PageIndexChanged(ByVal source As Object, ByVal e As GridPageChangedEventArgs) Handles RadGrid1.PageIndexChanged |
GetElements() |
End Sub |
Public Sub RadGrid1_SortCommand(ByVal source As Object, ByVal e As GridSortCommandEventArgs) Handles RadGrid1.SortCommand |
'RadGrid1.Columns.Clear() |
'GetElements() |
RadGrid1.MasterTableView.Rebind() |
End Sub |
Protected Sub cShow_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) 'Handles cShow.SelectedIndexChanged |
RadGrid1.MasterTableView.Rebind() |
End Sub |
Protected Sub cSearchForBtn_Click(ByVal sender As Object, ByVal e As System.EventArgs) 'Handles cSearchForBtn.Click |
RadGrid1.MasterTableView.Rebind() |
End Sub |
Protected Sub RadTextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) |
RadGrid1.MasterTableView.Rebind() |
End Sub |
End Class |
Some method and irrelevant code has been removed, but that code has no effect on the grid or anything else. afAccessLayer.ExecProcedure is a custom written method of executing stored procedures, so is everything else called using afAccessLayer. But they basicly do the same as regular calls, so they dont affect the result given.
Any help in locating what's removing the images which was added in ItemDataBound is appreciated.
Thanks,
Trygve