User Profile & Activity

Shawn August Member
Page
of 19

Hello,

Ok. I have notified this request to our developer teams. I will let you know after I got a response from them.
Actually, you don't need the combination server and client. If you used Dexter's workaround, it should work.

Regards,
Handy

 

I need to perform this logic on the server side. My work around above works for me.

 

Can your report back when this issue is resolved? Thank you.

I’m really sorry to inform you that it’s an incorrect approach to hide a column by setting the display style property to ‘none’. It is suggested to set column’s visibility to false (columns.Visible=“False”).

Should you need to access the value of other columns, please try to use HiddenDataMember approach.


The HiddenDataMember approach is using the column's Visible property. Correct?

 

If so, I will try this and report back.

Hello,

AutoFitColumn can have a different result when set to true or false. When set it true, It will re-calculate all the columns width and resize the column proportionally.
That's why there is a different time. But I could not say it would affect to performance much. Based on my test in my project and your original project, I still could not replicate very slow performance related to AutoFitColumns.

Regards,
Handy

 

I have solutions in this thread that show that the AutoFitColumns property affects performance dramatically. Please re-read some of the posts in this thread.  There were several performance issues and some how that AutoFitColumns property was altering performance. I am not sure if that was the culprit but it definately affected performance dramtically.

 

I think a change needs to be made to default the CSS in the WebGrid so that this sort of browser bug doesn't exist.  You cannot expect your user base to know that they need to specify some CSS to get around this issue.

 

function HideColumn()//hide cloumn       
{   var grid = ISGetObject("WebGrid1");

            var col = grid.RootTable.Columns.GetNamedItem("Cloumn Name");         

            col.Set("Visible", "false", true);

            grid.RefreshAll();

        }

 

That's not an option to perform a postback to hide a column.


Can I get an update on these bugs? Are they being addressed in the next release?


Thanks.

I removed the child items to avoid this issue. I didn't find a work-around that fixed the performance issue. You should default the necessary CSS so that this issue doensn't occur.  One would never know to specify CSS or which CSS to avoid this issue.


Also, I don't understand the correlation between AutoFitColumn with the Grid and this issue but I have spent WAY too much time trying to figure it out. 



Hello,

It seems there is an issue in our latest build. I will forward this issue to our developer teams and will let you know the update.

For temporary workaround, please try to disable/enable the WebButton from clientside.

Regards,
Handy

 

Can you please follow-up when this bug is fixed?


To resolve, I used a combination of server-side code (for initial load) and the Grid's InvokeScript for subsequent grid refreshes. The JavaScript just calls the WebButton's Enable/Disable method. An example:


        /// <summary>
        /// Allow the Adjustment Factor Reports to be executed
        /// </summary>
        /// <param name="allowReportsExecute">Flag to indicate if reports can be executed</param>
        /// <remarks>JavaScript is also used due to Intersoft Bug where the control is not rendered during Fly Postback mode</remarks>
        private void AllowAdjustmentFactorReportsExecute(bool allowReportsExecute)
        {
            this.lbtnCreateAdjustmentFactorReports.Enabled = allowReportsExecute;
            string jsCode = Common.Utility.CommonHelper.GetJSCode(string.Format("{0}_EnableCreateAdjustmentFactorReportControl({1});", this.ClientID, Common.Utility.CommonHelper.GetJSBoolean(this.lbtnCreateAdjustmentFactorReports.Enabled)));
            this.grdMasterShell.ClientAction.InvokeScript(jsCode);
        }

 

Hello,

For UI changes can be made on the server side only if the page is on FullPostBack mode. However, refresh is a FLyPostBack action. So, for UI changes, it is better if you do it in client.
But if you would like to do in server, try the following code.

protected void WebGrid1_InitializePostBack(object sender, ISNet.WebUI.WebGrid.PostbackEventArgs e)
    {
        if (e.Action == PostBackAction.RefreshData)
        {
            WebButton1.Enabled = false;
            WebGrid1.ClientAction.RenderControl(WebButton1);
        }
    }

 


Regards,
Handy

 

Do you have a simple example? I am getting a JavaScript error using that approach.

 

I also tried the WebButton's RequiresUIRefresh method but it didn't work.

 

ISRes.asxd - Line 11 Invalid Character

IS.RenderControl("ctl00_WebPaneManagerShell_ViewContentShell_ContentPlaceHolder_ucAdjustmentFactorReports_btnCreateReport", "<xml id=\'ctl00_WebPaneManagerShell_ViewContentShell_ContentPlaceHolder_ucAdjustmentFactorReports_btnCreateReport_x\'><!--[CDATA[<CompressedXml><WebButton Text=\"Create Report\" Image=\"/Endurance.Re.AWB.Web/Images/16x16/wg5_newrow.gif\" DisplayMode=\"TextAndImage\" AutoPostback=\"a\" DisabledStyle=\"W112GFA\" ProgressTextStyle=\"W1DJCD0\" ServerUniqueID=\"b$c$d$e$f$g\" UseWebResourcesForScript=\"a\" UseWebResourcesForClient=\"a\" xmlInputHiddenUniqueID=\"b$c$d$e$f$g$btnCreateReport_h\" XmlCompressionEnabled=\"a\"><ButtonStyle Normal=\"W32AJ17\" Over=\"W8J3G1\" Active=\"W32GGF8\" /><FlyPostBackSettings /></WebButton><ISXMLMapping><NodeKey /><NodeValue /><AttrKey /><AttrValue /><ValKey>gebafdc</ValKey><ValValue>btnCreateReportContentPlaceHolderctl00TrueucAdjustmentFactorReportsViewContentShellWebPaneManagerShell</ValValue></ISXMLMapping></CompressedXml>]]--></xml><button id=\'ctl00_WebPaneManagerShell_ViewContentShell_ContentPlaceHolder_ucAdjustmentFactorReports_btnCreateReport_f\'  class=\"W32AJ17 \" style=\'height:20px;width:125px;\'title=\'Create an adjustment factor report\' ><div><img align=absmiddle src=\'/Endurance.Re.AWB.Web/Images/16x16/wg5_newrow.gif\' hspace=2 /> Create Report</div></button><input type=\'hidden\' id=\'ctl00_WebPaneManagerShell_ViewContentShell_ContentPlaceHolder_ucAdjustmentFactorReports_btnCreateReport\' name=\'ctl00$WebPaneManagerShell$ViewContentShell$ContentPlaceHolder$ucAdjustmentFactorReports$btnCreateReport\"ctl00$WebPaneManagerShell$ViewContentShell$ContentPlaceHolder$ucAdjustmentFactorReports$btnCreateReport$btnCreateReport_h\" type=\"hidden\" id=\"ctl00_WebPaneManagerShell_ViewContentShell_ContentPlaceHolder_ucAdjustmentFactorReports_btnCreateReport_btnCreateReport_h\" />");InitWebButton(\'ctl00_WebPaneManagerShell_ViewContentShell_ContentPlaceHolder_ucAdjustmentFactorReports_btnCreateReport\');
    /// <summary>
        /// Handles the Reports WebGrid control's OnInitializePostBack event
        /// </summary>
        /// <param name="sender">Sender</param>
        /// <param name="e">Event Arguments</param>
        protected void grdReports_OnInitializePostBack(object sender, ISNet.WebUI.WebGrid.PostbackEventArgs e)
        {
            switch (e.Action)
            {
                case ISNet.WebUI.WebGrid.PostBackAction.RefreshAll:
                case ISNet.WebUI.WebGrid.PostBackAction.RefreshData:					  this.btnCreateReport.Enabled = true;
                    this.grdReports.ClientAction.RenderControl(this.btnCreateReport);
                    Common.Utility.IntersoftHelper.WebGrid.RestoreWebGridScrollPosition(this.grdReports);
                    break;
            }
        }

I usually use the WebGrids Client Side Event OnAfterResponseProcess

There is a listing of common actions for the WebGrid somewhere

Something like this...

function WebGridTimesheet_OnAfterResponseProcess(controlId, actionName, lastRequestObject, xmlResponseObject)
{
   switch (actionName)
   { 
 	case "Refresh":
	//Update some controls here
	break;
	case "DeleteRow":
	//Do something else here
	break;
   }
}
 The ClientSideEvents are under the LayoutSettings in the Properties window

 

That's not what I am looking for.  The Refresh is just the action that is causing the postback.  After that postback occurs, I need to have the UI changes made on the sever side be reflected after the postback. Using AJAX, one would add the control to an UpdatePanel. That doensn't work here.

Posted: February 10, 2011 11:40 AM

Hello,

AddStyle() would not be used if you customize all your style with CSS. WebToolBar/WebMenuBar provides properties which can be configured for its style. I already sent you the sample which I include all the style  in CSS and set it in those properties.

 <MenuStyleSettings BackgroundStripColor2="" MenuDropShadow="True" MenuAnimation="True"
  MenuWindowType="Normal" BackgroundStripColor="#E3EFFF">
 <CustomStyle CssClass="CustomStyle">
 </CustomStyle>
 <DisabledItemStyle>
 <Over CssClass="DisabledItemStyle-Over">
 </Over>
 <Normal CssClass="DisabledItemStyle-Normal">
 </Normal>
 </DisabledItemStyle>
 <CheckedItemStyle>
 <Over CssClass="CheckedItemStyle-Over">
 </Over>
 <Normal CssClass="CheckedItemStyle-Normal">
 </Normal>
 </CheckedItemStyle>
 <SeparatorStyle CssClass="SeparatorStyle"></SeparatorStyle>
 <FrameStyle CssClass="FrameStyle">
 </FrameStyle>
 <ItemStyle>
 <Over CssClass="ItemStyle-Over">
 </Over>
 <Normal CssClass="ItemStyle-Normal">
 </Normal>
 </ItemStyle>
 </MenuStyleSettings>
 <HeaderButtonStyle>
 <Active CssClass="HeaderButtonStyle-Active">
 </Active>
 <Over CssClass="HeaderButtonStyle-Over">
 </Over>
 <Normal CssClass="HeaderButtonStyle-Normal">
 </Normal>
 </HeaderButtonStyle>
 <BodyStyle BackColor="#BFDBFF"></BodyStyle>
 <CommandStyle>
 <Active CssClass="CommandStyle-Active">
 </Active>
 <Over CssClass="CommandStyle-Over">
 </Over>
 <Normal CssClass="CommandStyle-Normal">
 </Normal>
 </CommandStyle>
 <CommandDisabledStyle CssClass="CommandDisabledStyle">
 </CommandDisabledStyle>
 <SeparatorStyle CssClass="SeparatorStyle1"></SeparatorStyle>
 <HandleStyle BackColor="#BFDBFF"></HandleStyle>
 <OptionStyle BackColor="#C4C4AD"></OptionStyle>
 <HeaderCaptionStyle CssClass="HeaderCaptionStyle">
 </HeaderCaptionStyle>

I will need to discuss with our developer about AutoFitColumn property. But after configure CSS, without AutoFitColumn, the performance works well.

Regards,
Handy

 

 

I went through the new CSS and made one-by-one changes to narrow down the CSS causing the problem. Our existing application had similiar CSS except some were CSS classes and other was CSS explicitly in the markup.  Oddly,  the missing css was the following that references an empty CSS class: <CustomStyle CssClass="CustomStyle"></CustomStyle>

 

This really makes no sense at all.  Please find out from the developers the following:

1) What CSS MUST be defined within the WebMenubar/WebToolbar to avoid this performance bug? I am looking for specific Style properties that must be specified and the valid CSS classes and/or style that can be used?

2) Why does the WebGrid's AutoFitColumn property fixes this performance bug?

3) Why does a Split/DropdOWn button within a WebMenubAR/WebToolbar control cause this performance bug? What is specific about this that causes the bug?

 

Thank you.

 

 

 

I also verified this is an issue with FIreFox and not just IE.

 

Posted: February 10, 2011 12:55 AM

Hi,

Yes. All the style should be customized in CSS. If you don't use CSS, WebToolBar/WebMenuBar would use AddStyle() (default mechanism). As I said before, somehow this method is not functioning in IE.
If you run the sample in other browser, the performance would not slow.
Also, In your sample, I didn't touch anything about AutoFitColumn

Regards,
Handy

 

What exactly do I have to do to ensure that the AddStyle() is not used? What CSS do I have to specify?

 

As I mentioned in this thread, the WebGrid's AutoFitColumn property when set to TRUE removes the performance bug. This is also true if I don't have a WebToolBar with a splitButton/DropDownList button with a child item. I don't understand how the AddStyle relates to any of this?

All times are GMT -5. The time now is 12:21 AM.
Previous Next