Spread 在 ASP.NET 平台上支持无刷新的 Ajax 操作,同时提供了一系列的客户端 JavaScript 方法、事件对 Spread 进行样式、数据等操作。
有很多用户提出关于 Spread 和 UpdatePanel 中的控件交互问题,在这篇文章里我们将介绍如何通过 Spead 事件来更改 UpdatePanel 中的控件属性。
首先交代一些 UpdatePanel 背景:UpdatePanel 和 ScriptManager 控件联合使用可以实现页面异步局部更新的效果。其中的UpdatePanel就是设置页面中异步局部更新区域,它必须依赖于ScriptManager存在,因为ScriptManger控件提供了客户端脚本生成与管理UpdatePanel的功能。
下面我们给出几个比较常见的案例来展示 Spread 和 UpdatePanel 的交互方法。
案例一:单元格单击事件在Spread的ajax模式下与UpdatePanel中的控件相互操作
操作步骤:单击单元格,UpdatePanel 中的 Calendar 背景色,及 TextBox Text 属性改变。
实现思路:
通过以下代码添加客户端 Spread 单击事件,使其调用后台 FpSpread ButtonCommand 事件。
protected override void Render(HtmlTextWriter writer) { Table spreadTable = this.FpSpread1.FindControl("viewport") as Table; spreadTable.Attributes.Add("onclick", ClientScript.GetPostBackEventReference(FpSpread1, "Button,-1,-1") + "; return false;"); base.Render(writer); }
在该事件中我们可以操作 UpdatePanel 中控件。
protected void FpSpread1_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e) { this.Calendar1.BackColor = System.Drawing.Color.Red; this.TextBox1.Text = "通过 Spread Cell " + "行:" + this.FpSpread1.Sheets[0].ActiveRow.ToString() + "列:" + this.FpSpread1.Sheets[0].ActiveColumn.ToString() + "单击更改内容"; this.UpdatePanel1.Update(); }
案例二:单元格双击事件在Spread的ajax模式下与UpdatePanel中的控件相互操作
操作步骤:双击单元格,UpdatePanel 中的 Calendar 背景色,及 TextBox Text 属性改变。
实现思路:
通过以下代码添加客户端 Spread 双击事件,使其调用后台 FpSpread ButtonCommand 事件。
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); }
在该事件中我们可以操作 UpdatePanel 中控件。
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); } 在该事件中我们可以操作 UpdatePanel 中控件。 protected void FpSpread1_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e) { this.Calendar1.BackColor = System.Drawing.Color.Red; this.TextBox1.Text = "通过 Spread Cell " + "行:" + this.FpSpread1.Sheets[0].ActiveRow.ToString() + "列:" + this.FpSpread1.Sheets[0].ActiveColumn.ToString() + "单击更改内容"; this.UpdatePanel1.Update(); }
案例三:在Spread的ajax模式下UpdatePanel中的服务器Button控件获取和设置单元格选中状态和样式。
操作步骤:选择单元格范围,点击 Button ,Text 文本值为活跃表单索引、选择单元格范围 。
实现代码如下:
protected void Button1_Click(object sender, EventArgs e) { bool setCellRange = true; FarPoint.Web.Spread.Model.CellRange selectCellRange; selectCellRange = FpSpread1.Sheets[0].SelectionModel[0]; try { this.TextBox1.Text = "选择范围是:Sheet " + this.FpSpread1.ActiveSheetViewIndex.ToString() + "中的" + "起始 Cell " + selectCellRange.Row.ToString() + selectCellRange.Column.ToString() + "行数" + selectCellRange.RowCount.ToString() + "列数" + selectCellRange.ColumnCount.ToString(); this.TextBox1.BackColor = this.FpSpread1.Sheets[0].Cells[0, 0].BackColor = System.Drawing.Color.Red; this.UpdatePanel1.Update(); } catch (Exception) { setCellRange = false; } finally { if (!setCellRange) { ClientScript.RegisterStartupScript(this.GetType(), "newwin", "<script type ='text/javascript'> alert('请选择单元格区域')</script>"); } } }
案例四:在Spread的ajax模式下UpdatePanel中的服务器Button控件获取和设置Sheet选中状态和样式。
操作步骤:选择单元格范围,点击 Button ,Text 文本值为活跃表单索引、选择单元格范围。
代码如下:
protected void Button1_Click(object sender, EventArgs e) { bool setCellRange = true; FarPoint.Web.Spread.Model.CellRange selectCellRange; selectCellRange = FpSpread1.Sheets[0].SelectionModel[0]; try { this.TextBox1.Text = "选择范围是:Sheet " + this.FpSpread1.ActiveSheetViewIndex.ToString() + "中的" + "起始 Cell " + selectCellRange.Row.ToString() + selectCellRange.Column.ToString() + "行数" + selectCellRange.RowCount.ToString() + "列数" + selectCellRange.ColumnCount.ToString(); this.TextBox1.BackColor = this.FpSpread1.Sheets[0].Cells[0, 0].BackColor = System.Drawing.Color.Red; this.UpdatePanel1.Update(); } catch (Exception) { setCellRange = false; } finally { if (!setCellRange) { ClientScript.RegisterStartupScript(this.GetType(), "newwin", "<script type ='text/javascript'> alert('请选择单元格区域')</script>"); } } }
Demo 下载,本 Demo 包含以上四个案例:SpreadforASPDemo.zip (439.23 kb)
以上即为我这次分享的 4 个实际案例,欢迎大家积极讨论,同时也期待你共享实际案例给大家。