找回密码
 立即注册

QQ登录

只需一步,快速开始

[已处理] 强制spread刷新

study1990
金牌服务用户   /  发表于:2012-6-26 15:29:00
11#
回复 10楼iceman的帖子

好吧,我换个问题。
我利用C#在后台的控制器对CommandBar添加了一些按钮,每当使用这些按钮时,Spread会到后台再次渲染此按钮,这样如果在互联网上会很影响效率,怎样优化此问题?

  1. //渲染方法
  2. void FpSpread_PreRender(object sender, EventArgs e)
  3. {
  4.     FpSpread spread = (FpSpread)sender;
  5.     System.Web.UI.Page page = spread.Page;
  6.     page.PreRenderComplete += new EventHandler(ReportTemplate_PreRenderComplete);
  7. }
  8. void FpSpread_PreRenderComplete(object sender, EventArgs e)
  9. {
  10.     //添加的按钮
  11. }
复制代码
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-6-26 18:28:00
12#
回复 11楼study1990的帖子
你好,FpSpread_PreRender 事件每次回调都会触发,所以无法优化,同时,只有在 Render 事件中添加按钮才能保证每次回调都添加成功。
回复 使用道具 举报
study1990
金牌服务用户   /  发表于:2012-6-27 17:12:00
13#
回复 12楼iceman的帖子

可不可以将整个Spread在session里,并保证Spread的完整性,当回调时从session里提取Spread?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-6-27 18:00:00
14#
回复 13楼study1990的帖子

可以。
保存使用
  1. Session[e.SheetView.SheetName] = e.SheetView.SaveViewState();
复制代码

读取使用:
  1. e.SheetView.LoadViewState(Session[e.SheetView.SheetName]);
复制代码
回复 使用道具 举报
study1990
金牌服务用户   /  发表于:2012-6-28 09:36:00
15#
回复 14楼iceman的帖子

怎么样当第一次渲染结束后利用上面保存代码将Spread放在Session里,然后当点击CommandBar按钮时不再次渲染,而利用上面读取代码获取Spread状态?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-6-28 12:01:00
16#
回复 15楼study1990的帖子

使用以下代码测试:

  1. protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             if (IsPostBack)
  4.             {
  5.                 this.Session["postback"] = false;
  6.             }
  7.             else
  8.             {
  9.                 this.Session["postback"] = true ;
  10.             }
  11.         }
  12.         protected override void Render(HtmlTextWriter writer)
  13.         {
  14.             if (Convert.ToBoolean(this.Session["postback"]))
  15.             {
  16.                 //如果是第一次就渲染此按钮

  17.                 //保存到 session
  18.                 Session[this.FpSpread1.Sheets[0].SheetName] = this.FpSpread1.Sheets[0].SaveViewState();
  19.                
  20.             }
  21.             else
  22.             {
  23.                 this.FpSpread1.Sheets[0].LoadViewState(Session[this.FpSpread1.Sheets[0].SheetName]);
  24.             }
  25.             base.Render(writer);
  26.         }
复制代码
回复 使用道具 举报
study1990
金牌服务用户   /  发表于:2012-6-28 15:36:00
17#
回复 16楼iceman的帖子

在MVC模式下怎么使用?
我是利用
public ActionResult Add([MvcSpread(true)] FpSpread fpspread){}添加控件,
void fpspread_PreRender(object sender, EventArgs e)设置控件样式及属性,
和void fpspread_PreRenderComplete(object sender, EventArgs e)添加按钮的。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-6-28 17:04:00
18#
回复 17楼study1990的帖子

请问 study1990 使用 MVC2 还是 MVC3?使用 Spread 版本是 v6.0.3505 吗?
回复 使用道具 举报
study1990
金牌服务用户   /  发表于:2012-6-28 17:50:00
19#
回复 18楼iceman的帖子

都是最新的。
ASP.NET MVC3
FarPoint.Web.Spread:6.0.3505.2008
FarPoint.Mvc.Spread:6.0.4005.2010
运行时版本:v4.0.30319
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-6-28 17:50:00
20#
回复 19楼study1990的帖子

好的,问题正在处理中,有结果尽快通知楼主。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部