在 Web 项目中使用 Spread ,通过 JaveScript 和 Spread 交互获取相关属性是极为常见的Case。当然,也有很多用户给我们提出过相关的问题,这里我们给出几个比较常见的案例来展示 JaveScript 和 Spread 的交互方法。
案例一:JavaScript获取活跃单元格位置及单元格的相关属性
本案例的实现思路为,通过 Spread ActiveRow 和 ActiveCol 属性获取当前活跃单元格行列索引,再通过 Spread 前台方法 GetCellByRowCol 获取当前活跃单元格对象。
<script language="javascript" type="text/javascript"> window.onload = function setactivecell() { var spread = document.getElementById("ctl00_ContentPlaceHolder1_FpSpread1"); spread.SetActiveCell(0, 0); } function Button2_onclick() { var spread = document.getElementById("ctl00_ContentPlaceHolder1_FpSpread1"); //单元格位置 //获取活跃单元格所在行索引 var activerowindex = spread.ActiveRow; //获取活跃单元格所在列索引 var activecolindex = spread.ActiveCol; //获取活跃单元格 var actvecell = spread.GetCellByRowCol(activerowindex, activecolindex); var select = document.getElementById("list"); select.options.length = 0; var varItem = new Option("单元格行索引:" + activerowindex, 0); select.options.add(varItem); var varItem = new Option("单元格列索引:" + activecolindex, 1); select.options.add(varItem); var varItem = new Option("单元格 Text 属性:" + actvecell.innerHTML, 2); select.options.add(varItem); var varItem = new Option("单元格 bcakcolor 属性:" + actvecell.style.backgroundColor, 3); select.options.add(varItem); select.selectedIndex = 0; } </script>
效果图:
案例二:光标进入单元格后与服务器通信
实现思路为,Spread 内容单元格在前台渲染为 HTML Table,Table 名称为 viewport,抓取 HTML Table 后通过后台设置 viewport 的前台双击事件。通过 GetPostBackEventReference 方法更改点击行为,触发 FpSpread ButtonCommand 事件,从而更改单元格属性。
代码如下:
protected void Page_Load(object sender, EventArgs e) { this.FpSpread1.Sheets[0].Cells[0, 0].Text = "双击单元格"; } protected void FpSpread1_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e) { this.FpSpread1.Sheets[0].BackColor = Color.Red; this.FpSpread1.Sheets[0].Cells[0, 0].Text = "光标进入单元格和后台交互"; } protected override void Render(HtmlTextWriter writer) { Table spreadTable = this.FpSpread1.FindControl("viewport") as Table; spreadTable.Attributes.Add("ondblclick", ClientScript.GetPostBackEventReference(FpSpread1, "Button,-1,-1") + "; return false;"); base.Render(writer); }
效果图:
案例三:光标离开单元格后与服务器通信
此案例实现思路为,调用 FpSpread EditStopped 前台事件,使用FpSpread CallBack 前台方法调用 Spread 后台 ButtonCommand 事件。
JS代码:
<script language="javascript" type="text/javascript" id="FpSpread1_Script3"> function FpSpread1_EditStopped(event){ //Add code to handle your event here. var spread = document.getElementById("ctl00_ContentPlaceHolder1_FpSpread1"); spread.UpdatePostbackData(); spread.CallBack("Button"); } </script>
CS代码:
protected void FpSpread1_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e) { this.FpSpread1.Sheets[0].BackColor = Color.Red; this.FpSpread1.Sheets[0].Cells[0, 0].Text = "光标离开单元格和后台交互"; }
效果图:
案例四:获取和设置Spread滚动条位置
本案例通过设置 Spread 前台属性 scrollTop 和 scrollLeft 来改变滚动条位置。
代码如下:
function Button1_onclick() { var spread = document.getElementById("ctl00_ContentPlaceHolder1_FpSpread1_view"); var scrollTopPosition = spread.scrollTop; var scrollLeftPosition = spread.scrollLeft; spread.scrollLeft = 200; spread.scrollTop = 200; }
效果图:
案例五:实现鼠标拖动整体控件缩放
这个案例的实现思路为设置 Spread 的 Height 和 Width 属性为 100%,同时,把 Spread 嵌套在 div 内。接下来我们通过 JS 操作 div 大小即可。
效果图:
Demo 下载,本 Demo 包含以上五个案例:SpreadforASPDemo.zip (481.06 kb)
以上即为我这次分享的 5 个实际案例,欢迎大家积极讨论,同时也期待你共享实际案例给大家。