找回密码
 立即注册

QQ登录

只需一步,快速开始

sam
论坛元老   /  发表于:2012-11-10 09:30  /   查看:7431  /  回复:6
Hi dof:


请问下:
在Js中,如何得到ColumnFooter的某一个格的值?另,如何设置ColumnFooter的某一个格的值(设置后也要能取到)?使用Js方法,使页面不刷新。
就像Js中的方法:GetValue和SetValue.


以上比如,做一个利用ColumnFooter做一个汇总行,即:当表格中的某列的某个值发生改变时,此列对应的ColumnFooter的单元格的值也要发生改变,实现数据的汇总。
(前提,不能使用Spread自带的公式功能,因为当开启公式功能,就会当改变任意格的值,都会引起页面的重新刷新)。

以上如何实现?
谢谢!

6 个回复

倒序浏览
sam
论坛元老   /  发表于:2012-11-10 11:54:00
沙发
Hi dof:

以上我知道可以通过CallBack来实现后台赋值,但是这样会引起页面的刷新,造成性能的影响。看有没办法直接通过Js来赋值和取值。主要是赋值。
谢谢!
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-11-12 11:47:00
板凳
回复 2楼sam的帖子

sam 你好

看你最近几个功能都要求不能刷新页面,如果是这样的话你可以考虑将Spread方法UpdatePanel中,这样就不会刷新整个页面

  1. <body>
  2.     <form id="form1" runat="server">
  3.     <asp:ScriptManager ID="ScriptManager1" runat="server">
  4.     </asp:ScriptManager>
  5.     <div>
  6.         <asp:UpdatePanel ID="UpdatePanel1" runat="server">
  7.             <ContentTemplate>
  8.                 <input id="Button1" type="button" value="button" onclick="return Button1_onclick()" /><br />
  9.                 <FarPoint:FpSpread ID="FpSpread1" runat="server" BorderColor="Black" BorderStyle="Solid"
  10.                     BorderWidth="1px" Height="200" Width="400"
  11.                     onbuttoncommand="FpSpread1_ButtonCommand">
  12.                     <CommandBar BackColor="Control" ButtonFaceColor="Control" ButtonHighlightColor="ControlLightLight"
  13.                         ButtonShadowColor="ControlDark">
  14.                     </CommandBar>
  15.                     <Sheets>
  16.                         <FarPoint:SheetView SheetName="Sheet1">
  17.                         </FarPoint:SheetView>
  18.                     </Sheets>
  19.                 </FarPoint:FpSpread>
  20.             </ContentTemplate>
  21.         </asp:UpdatePanel>
  22.     </div>
  23.     </form>
  24. </body>
复制代码

  1.         protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             if (IsPostBack)
  4.             {
  5.                 return;
  6.             }

  7.             this.FpSpread1.ActiveSheetView.ColumnFooter.Visible = true;
  8.             this.FpSpread1.ActiveSheetView.ColumnFooter.Cells[0, 0].Text = "AAAA";
  9.         }

  10.         protected void FpSpread1_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
  11.         {
  12.             this.FpSpread1.ActiveSheetView.ColumnFooter.Cells[0, 0].Text = "BBBB";
  13.         }
复制代码

6831_ColumnFooter.zip (7.86 KB, 下载次数: 134)
回复 使用道具 举报
sam
论坛元老   /  发表于:2012-11-12 15:10:00
地板
Hi dof

感谢您的回复,其实我本来就已经使用了UpdatePanel,所以,这个不是问题。页面是不会刷新的。
(你上面提出的方法,我已实现,现在就是这样做的)
我的意思是不想调用后台代码,这样会造成的Page_Load里的代码执行。这样如果,采用后台方法执行,则每次都会
执行Page_Load里的方法。说明,我的页面的控件是动态生成的,故,每次刷新都会导致页面的重画。这样,如果页面很复杂,每次都执行Page_Load里的方法就会有很大的性能影响。

故,我的意思是想直接使用前台代码(如:SetValue)来设置ColFooter里的值。

以上看有没办法实现?谢谢!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-11-16 09:51:00
5#
回复 4楼sam的帖子

你好,
ColumnFooter 在前台被渲染为 HTML Table。所以我们可以通过 js 操作 Table 来进行更改单元格的值。操作代码为:

  1.     function Button1_onclick() {

  2.             var colFooterTab = this.document.getElementById(&quot;FpSpread1_cft&quot;);
  3.             colFooterTab.rows[0].cells[0].innerText = &quot;测试&quot;;
  4.         }
复制代码

做了一个测试 Demo,请你参考:
VS 2010 + FM4 + Spread .NET 6
6831.zip (17.08 KB, 下载次数: 167)
回复 使用道具 举报
sam
论坛元老   /  发表于:2012-11-16 19:08:00
6#
以上方法,我试过了,是可以设置,但是页面一刷新,刚设置的值又会消失。
麻烦再帮忙想想看,看是否还有其他的方法。(通过Js前台设置)。
说明下:其他的单元格是可以通过SetValue和GetValue来设置和获取单元格的值。我们能不能自己来实现类似SetValue和GetValue的Js方法(对ColumnFooter和隐藏列)。
以上 非常感谢!
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-11-19 10:09:00
7#
Hi sam

Spread 前端提供的SetValue和GetValue方法,只能针对前端的可见单元格有效,对Header、Footer、隐藏类型的单元格无效,这三种类型的单元格只能在后台设置之后才能保持到spread中。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部