找回密码
 立即注册

QQ登录

只需一步,快速开始

raul1122

中级会员

42

主题

155

帖子

980

积分

中级会员

积分
980

活字格认证微信认证勋章

raul1122
中级会员   /  发表于:2015-6-16 10:26  /   查看:6908  /  回复:8
我在Spread中,使用代码将某个单元格的类型强制转换为Commbox 实现类似 省市县级联的效果,现在在编辑的时候,我如何对 “省” 这个单元格赋值之后,自动根据 "省"的值 刷新 "市" 这个单元格

8 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2015-6-16 11:46:00
沙发
回复 1楼raul1122的帖子

请参考博客文章:点击进入
回复 使用道具 举报
raul1122
中级会员   /  发表于:2015-6-16 13:36:00
板凳
我想知道的是,编辑的时候如何赋值,如何自动触发 FpSpread1_ButtonCommand 事件
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-6-16 18:05:00
地板
回复 3楼raul1122的帖子

博客中通过前台的 FpSpread CallBack 方法调用后台的 ButtonCommand 事件实现自动触发:

  1. <script type ="text/javascript" language="javascript">
  2.         function CategoryChanged() {
  3.             var row = FpSpread1.ActiveRow;
  4.             var col = FpSpread1.ActiveCol;
  5.             FpSpread1.EndEdit();
  6.             FpSpread1.UpdatePostbackData();
  7.             FpSpread1.CallBack("CategoryChanged," + row.toString() + "," + col.toString());
  8.         }
  9.     </script>
复制代码


后台:

  1. /// <summary>
  2.     /// Spread ButtonCommand 事件的处理函数,根据e.CommandName的值来决定相应的处理逻辑
  3.     /// </summary>
  4.     /// <param name="sender"></param>
  5.     /// <param name="e"></param>
  6.     protected void FpSpread1_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
  7.     {
  8.         switch (e.CommandName)
  9.         {
  10.             case "CategoryChanged":

  11.                 // 取到选择的产品类别,作为产品名称列的查询条件
  12.                 Point cell = (Point)e.CommandArgument;
  13.                 int categoryid = Convert.ToInt32(this.FpSpread1.ActiveSheetView.Cells[cell.X, cell.Y].Value.ToString());

  14.                 // 指定产品列相应单元格的CellType
  15.                 DataSet ds = GetDataSource();
  16.                 DataView product = ds.Tables["Products"].DefaultView;
  17.                 product.RowFilter = string.Format("CategoryID = {0}", categoryid);
  18.                 ComboBoxCellType ctProduct = new FarPoint.Web.Spread.ComboBoxCellType();        
  19.                 ctProduct.DataSource = product;
  20.                 ctProduct.DataTextField = "Name";
  21.                 ctProduct.DataValueField = "ID";
  22.                 ctProduct.UseValue = true;
  23.                 FpSpread1.ActiveSheetView.Cells[cell.X, cell.Y + 1].CellType = ctProduct;

  24.                 break;
  25.             default:
  26.                 break;
  27.         }

  28.     }
复制代码
回复 使用道具 举报
raul1122
中级会员   /  发表于:2015-6-17 09:28:00
5#
在编辑的状态下,我对 “省&quot; 这个单元格赋值,默认是不会触发后台的事件,这样就导致 &quot;市&quot; 的单元格加载的所有的数据,并不是来源于 &quot;省&quot; 里面的值
回复 使用道具 举报
raul1122
中级会员   /  发表于:2015-6-17 09:29:00
6#
我是需要 对 &quot;省&quot; 单元格赋值,然后调用 前台js,这样肯定存在页面生命周期的问题
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-6-17 13:35:00
7#
回复 6楼raul1122的帖子

生命周期问题我们已经收到,在首次刷新是会出现状态无法保存情况。请问您那边情况是否一致?
Demo1.gif
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-6-24 10:19:00
8#
回复 6楼raul1122的帖子

请问您这个问题是否解决?

Spread 状态可以存储在 ViewState 中,同时也可以手动存储到 Sessoin 中,代码如下:

  1. protected void Page_Load(object sender, System.EventArgs e)
  2. {
  3. if (this.IsPostBack) return;
  4. // Connect to NWIND MS Access example with OLE DB.
  5. OleDbConnection thisConnection = new OleDbConnection(&quot;Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\\NWIND.MDB&quot;);
  6. // Open connection.
  7. thisConnection.Open();
  8. // Create DataSet to contain related data tables, rows, and columns.
  9. DataSet thisDataSet = new DataSet();
  10. OleDbDataAdapter orderAdapter = new OleDbDataAdapter(&quot;SELECT * FROM Orders&quot;, thisConnection);
  11. orderAdapter.Fill(thisDataSet, &quot;Orders&quot;);
  12. FpSpread1.ActiveSheetView.IsTrackingViewState = true;
  13. FpSpread1.ActiveSheetView.DataSource = thisDataSet;
  14. FpSpread1.ActiveSheetView.DataMember = &quot;Orders&quot;;
  15. }
  16. protected void FpSpread1_SaveOrLoadSheetState(object sender, FarPoint.Web.Spread.SheetViewStateEventArgs e)
  17. {
  18. if (e.IsSave)
  19. {
  20. Session[e.SheetView.SheetName] = e.SheetView.SaveViewState();
  21. }
  22. else
  23. {
  24. e.SheetView.LoadViewState(Session[e.SheetView.SheetName]);
  25. }
  26. e.Handled = true;
  27. }
复制代码
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-7-8 10:25:00
9#
回复 6楼raul1122的帖子

为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部