Hi,
Basically I have a static tab in my page (not closable) with a radgrid in it. On a row double click, I create a tab in javascript, select the tab and generate a user control in it (a detail grid). So far so good, it works great, however theres a wierd behavior with a newly generated tab under certain conditions.
Here is the javascript part of my code:
code behind:
html:
Here is my problem: when I have no dynamic tab created, and I do an action on the grid in my static tab (be it using a filter, or changing the page in the pager), the first time I try to create a tab it automatically closes itself. However, if i try to create it again, it will work. Also, if i already have a dynamic tab created, this behavior seems to not happen and things are functionning properly.
Also, I have tried to not force a click in my javascript, and click it manually instead. The same thing happens, the tab is created, and when I click on it (and it tries to create the pageview and load the user control), it will close itself. So I can be sure that this bahavior seems to happen when the click action is made upon the tab.
Again, I want to say that this code is working as expected in most cases, except for this very specific case (when using filter or changing page in pager, and no dynamic tab was already created)
Thanks
Basically I have a static tab in my page (not closable) with a radgrid in it. On a row double click, I create a tab in javascript, select the tab and generate a user control in it (a detail grid). So far so good, it works great, however theres a wierd behavior with a newly generated tab under certain conditions.
Here is the javascript part of my code:
<script type="text/javascript"> var tabStrip1; function OnClientLoad() { tabStrip1 = $find('<%= RadTabStrip1.ClientID %>'); for (var i = 0; i < tabStrip1.get_tabs().get_count(); i++) { if (i != 0) { AttachCloseImage(tabStrip1.get_tabs().getItem(i), "../../Images/delete.gif"); } } } function addNewTab(sender, eventArgs) { //Va chercher l'information du row que j'ai de besoin var dataItem = $get(eventArgs.get_id()); var grid = sender; var MasterTable = grid.get_masterTableView(); var row = MasterTable.get_dataItems()[eventArgs.get_itemIndexHierarchical()]; var cell = MasterTable.getCellByColumnUniqueName(row, "element_couvert"); var value = cell.innerHTML; //add le tab var tabStrip = $find("<%= RadTabStrip1.ClientID %>"); var tab; tab = tabStrip.findTabByText(value); if (tab) { tab.click(); } else { var tab = new Telerik.Web.UI.RadTab(); tab.ID = cell.innerHTML.replace("/", "").replace(" ", ""); tab.set_text(value); tabStrip.trackChanges(); tabStrip.get_tabs().add(tab); tabStrip.commitChanges(); tab.click(); AttachCloseImage(tab, "../../Images/delete.gif"); } } function CreateCloseImage(closeImageUrl) { var closeImage = document.createElement("img"); closeImage.src = closeImageUrl; closeImage.alt = "Fermer cet onglet"; return closeImage; } function AttachCloseImage(tab, closeImageUrl) { var closeImage = CreateCloseImage(closeImageUrl); closeImage.AssociatedTab = tab; closeImage.onclick = function(e) { if (!e) e = event; if (!e.target) e = e.srcElement; deleteTab(tab); e.cancelBubble = true; if (e.stopPropagation) { e.stopPropagation(); } return false; } tab.get_innerWrapElement().appendChild(closeImage); } function deleteTab(tab) { var tabStrip = $find("<%= RadTabStrip1.ClientID %>"); var multiPage = $find("<%= RadMultiPage1.ClientID %>"); var pageView = tab.get_pageView(); var tabToSelect = tab.get_nextTab(); if (!tabToSelect) tabToSelect = tab.get_previousTab(); tabStrip.trackChanges(); tabStrip.get_tabs().remove(tab); tabStrip.commitChanges(); multiPage.trackChanges(); multiPage.get_pageViews().remove(pageView); multiPage.commitChanges(); if (tabToSelect) tabToSelect.set_selected(true); } function onTabSelecting(sender, args) { if (args.get_tab().get_pageViewID()) { args.get_tab().set_postBack(false); } } </script>code behind:
Protected Sub RadMultiPage1_PageViewCreated(ByVal sender As Object, ByVal e As RadMultiPageEventArgs) Handles RadMultiPage1.PageViewCreated If e.PageView.ID <> "RadPageView5" Then Dim userControlName As String = "/Commun/UserControls/DetailElementCouvert.ascx" Dim ctrl As Control Dim userControl As Fede.Web.Sifa.DetailElementCouvert ctrl = LoadControl(userControlName) userControl = CType(ctrl, Fede.Web.Sifa.DetailElementCouvert) userControl.ID = e.PageView.ID & "_userControl" userControl.Strategie = e.PageView.ID.Trim() userControl.LaDate = CDate(Master.fJour.SelectedDate) e.PageView.Controls.Add(userControl) End If End Sub Private Sub AddPageView(ByVal tab As RadTab) Dim pageView As RadPageView = New RadPageView pageView.ID = tab.Text RadMultiPage1.PageViews.Add(pageView) RadMultiPage1.SelectedIndex = RadMultiPage1.PageViews.Count - 1 pageView.CssClass = "pageView" tab.PageViewID = pageView.ID End Sub Protected Sub RadTabStrip1_TabClick(ByVal sender As Object, ByVal e As RadTabStripEventArgs) Handles RadTabStrip1.TabClick If String.IsNullOrEmpty(e.Tab.PageViewID) Then AddPageView(e.Tab) e.Tab.PageView.Selected = True e.Tab.Selected = True End If End Subhtml:
<telerik:RadTabStrip ID="RadTabStrip1" runat="server" Orientation="HorizontalTop" SelectedIndex="0" MultiPageID="RadMultiPage1" OnClientLoad="OnClientLoad" OnClientTabSelecting="onTabSelecting"> <Tabs> <telerik:RadTab Text="Information élément couvert" Selected="True" PageViewID="RadPageView5"> <TabTemplate> <div class="textWrapper"> Information élément couvert </div> </TabTemplate> </telerik:RadTab> </Tabs> </telerik:RadTabStrip> <telerik:RadMultiPage runat="server" ID="RadMultiPage1" SelectedIndex="0"> <telerik:RadPageView runat="server" ID="RadPageView5"> <telerik:RadGrid ID="RadGrid1" Culture="French (Canada)" runat="server" GroupingEnabled="False" ShowStatusBar="True" ClientSettings-ClientEvents-OnRowDblClick="addNewTab" ClientSettings-ClientEvents-OnCommand="OnCommand"> <MasterTableView AllowFilteringByColumn="true" AllowPaging="True" AllowSorting="true" AutoGenerateColumns="False" PageSize="16" CommandItemDisplay="Top"> <CommandItemTemplate> <div style="float: right"> <telerik:RadButton ID="DownloadPDF" runat="server" Text="Confirmer action sur JV" /> <telerik:RadButton ID="RadButton5" runat="server" Text="Confirmer action sur FT" /> <telerik:RadButton ID="RadButton1" runat="server"> <Icon PrimaryIconCssClass="rbRefresh" PrimaryIconLeft="8" PrimaryIconTop="4" /> </telerik:RadButton> </div> </CommandItemTemplate> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Bottom" /> <PagerStyle AlwaysVisible="True" Mode="Slider" /> <ItemStyle Wrap="false" HorizontalAlign="Right" VerticalAlign="Middle" /> <AlternatingItemStyle Wrap="false" HorizontalAlign="Right" VerticalAlign="Middle" /> <Columns> <telerik:GridBoundColumn DataField="etat_bloc" HeaderText="État du bloc" UniqueName="etat_bloc" FilterControlWidth="70%" DataType="System.String"> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="strategie" HeaderText="Stratégie" UniqueName="strategie" FilterControlWidth="70%" DataType="System.String"> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle"/> <ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="element_couvert" HeaderText="Code élément couvert" UniqueName="element_couvert" FilterControlWidth="70%" DataType="System.String"> <HeaderStyle HorizontalAlign="Center" /> <ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="date_echeance" DataFormatString="{0:d}" HeaderText="Date échéance" FilterControlWidth="70%" UniqueName="date_echeance" DataType="System.DateTime"> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="nomi_designe" DataFormatString="{0:N0}" HeaderText="Nominal utilisé ($)" FilterControlWidth="70%" UniqueName="nomi_designe" Datatype="System.Int64"> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Right" VerticalAlign="Middle" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="nbre_designe" DataFormatString="{0:N0}" HeaderText="Nombre de désignations" FilterControlWidth="70%" UniqueName="nbre_designe" Datatype="System.Int64"> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Right" VerticalAlign="Middle" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="nomi_disponible" DataFormatString="{0:N0}" HeaderText="Nominal utilisable ($)" FilterControlWidth="70%" UniqueName="nomi_disponible" Datatype="System.Int64"> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Right" VerticalAlign="Middle" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="taux_utilis_act" HeaderText="Taux utilis. actuel (%)" FilterControlWidth="70%" UniqueName="taux_utilis_act" DataFormatString="{0:N2}" DataType="System.Double"> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Right" VerticalAlign="Middle" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="nomi_total_cour" DataFormatString="{0:N0}" HeaderText="Nominal courant ($)" FilterControlWidth="70%" UniqueName="nomi_total_cour" Datatype="System.Int64"> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Right" VerticalAlign="Middle" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="nomi_total_prec" DataFormatString="{0:N0}" HeaderText="Nominal précédent ($)" FilterControlWidth="70%" UniqueName="nomi_total_prec" Datatype="System.Int64"> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Right" VerticalAlign="Middle" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="ecart_absolu" DataFormatString="{0:N0}" HeaderText="Écart absolu ($)" FilterControlWidth="70%" UniqueName="ecart_absolu" Datatype="System.Int64"> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Right" VerticalAlign="Middle" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="ecart_pct" HeaderText="Écart (%)" UniqueName="ecart_pct" FilterControlWidth="70%" DataFormatString="{0:N2}" DataType="System.Double"> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Right" VerticalAlign="Middle" /> </telerik:GridBoundColumn> <telerik:GridButtonColumn Text="Détail" UniqueName="D" ItemStyle-HorizontalAlign="Center" ButtonType="LinkButton" CommandName="CustomDetail" /> </Columns> <PagerStyle AlwaysVisible="True" Mode="Slider" /> </MasterTableView> <ClientSettings Scrolling-UseStaticHeaders="false"> <Scrolling AllowScroll="True" UseStaticHeaders="true" ScrollHeight="" /> <Resizing AllowResizeToFit="true" AllowColumnResize="true" EnableRealTimeResize="true" /> </ClientSettings> <FilterMenu EnableImageSprites="False"> </FilterMenu> </telerik:RadGrid> </telerik:RadPageView> </telerik:RadMultiPage>Here is my problem: when I have no dynamic tab created, and I do an action on the grid in my static tab (be it using a filter, or changing the page in the pager), the first time I try to create a tab it automatically closes itself. However, if i try to create it again, it will work. Also, if i already have a dynamic tab created, this behavior seems to not happen and things are functionning properly.
Also, I have tried to not force a click in my javascript, and click it manually instead. The same thing happens, the tab is created, and when I click on it (and it tries to create the pageview and load the user control), it will close itself. So I can be sure that this bahavior seems to happen when the click action is made upon the tab.
Again, I want to say that this code is working as expected in most cases, except for this very specific case (when using filter or changing page in pager, and no dynamic tab was already created)
Thanks