找回密码
 立即注册

QQ登录

只需一步,快速开始

lxyforce

新手上路

1

主题

1

帖子

21

积分

新手上路

积分
21
  • 20

    金币

  • 主题

  • 帖子

最新发帖
lxyforce
新手上路   /  发表于:2012-12-21 16:15  /   查看:11971  /  回复:10
版本 webform 4.0

我的fpspread是和SqlDataSource绑定的,而且是在设计的时候就绑定的,不是写代码绑定,请问这样还能实现筛选器吗?
之前通过点击按钮修改datasource的select command达到筛选的目的,
string sql = "SELECT * FROM " + tableName + " WHERE 1=1 ";
        if (txtVersion.Text != "")
        {
            sql += " AND VERSION = '" + txtVersion.Text.Trim() + "'";
        }
        if (ddlLine.SelectedValue.Trim() != "" && ddlLine.SelectedValue.Trim() != "ALL")
        {
            sql += " AND LINE = '" + ddlLine.SelectedValue.Trim() + "'";
        }
但是这样,一旦翻页后,就会失去筛选的条件
请教应该如何做?

看到Spread可以直接金型筛选,想说就不用做文本框让用户输入筛选内容了,直接在控件中进行筛选

10 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-21 17:41:00
沙发
回复 1楼lxyforce的帖子

你这里提到的数据过滤是指在列头中的过滤功能吗,通过以下方法设置过滤,翻页之后过滤值还是会有效的:
  1.     protected void Page_Load(object sender, EventArgs e)
  2.     {
  3.         if (!IsPostBack)
  4.         {
  5.             FarPoint.Web.Spread.NamedStyle instyle = new FarPoint.Web.Spread.NamedStyle();
  6.             FarPoint.Web.Spread.NamedStyle outstyle = new FarPoint.Web.Spread.NamedStyle();
  7.             instyle.BackColor = System.Drawing.Color.Yellow;
  8.             outstyle.BackColor = System.Drawing.Color.Aquamarine;
  9.             FarPoint.Web.Spread.FilterColumnDefinition fcd = new FarPoint.Web.Spread.FilterColumnDefinition(1, FarPoint.Web.Spread.FilterListBehavior.SortByMostOccurrences | FarPoint.Web.Spread.FilterListBehavior.Default);
  10.             FarPoint.Web.Spread.FilterColumnDefinition fcd1 = new FarPoint.Web.Spread.FilterColumnDefinition(2);
  11.             FarPoint.Web.Spread.FilterColumnDefinition fcd2 = new FarPoint.Web.Spread.FilterColumnDefinition();
  12.             FarPoint.Web.Spread.StyleRowFilter sf = new FarPoint.Web.Spread.StyleRowFilter(FpSpread1.Sheets[0], instyle, outstyle);
  13.             sf.AddColumn(fcd);
  14.             sf.AddColumn(fcd1);
  15.             sf.AddColumn(fcd2);
  16.             FpSpread1.Sheets[0].RowFilter = sf;               
  17.         }
  18.     }
复制代码
回复 使用道具 举报
sdwd_lhq
注册会员   /  发表于:2012-12-23 16:56:00
板凳
回复 2楼dof的帖子

这种行过滤都会在表头形成一个下拉框,对出现的值进行归并,然后让用户进行选择。可以满足对单项数据行的过滤,
Snap1.jpg (4.11 KB, 下载次数: 1262)
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-24 17:56:00
地板
回复 3楼sdwd_lhq的帖子

sdwd_lhq  你好

目前Spread for ASP.NET还不支持这种过滤方式。
回复 使用道具 举报
sdwd_lhq
注册会员   /  发表于:2012-12-27 13:26:00
5#
回复 4楼dof的帖子

如果这种模糊行过滤不行,可否有行查找功能,即按条件进行记录查找,找到后滚动到所找到的行,然后高亮显示?
附我的代码,能够实现查找,但不能实现滚动到所找到的行,请问如果实现?

  1.     protected void btn_serch_Click(object sender, EventArgs e)
  2.     {
  3.         int x = -1;
  4.         int y = -1;
  5.         FpSpread1.Search(0, txt_serch.Text, false, false, false, false, 0, 0, ref x, ref y);

  6.         if (x>=0)
  7.         {
  8.             //从x行0列开始总共1行10列被选择
  9.             FpSpread1.ActiveSheetView.SelectionModel.SetSelection(x, 0, 1, 10);

  10.         }
  11.         

  12.     }
复制代码
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-27 14:31:00
6#
回复 5楼sdwd_lhq的帖子

查询之后可在服务端调用客户端的JS来实现滚动操作:
  1.         protected void btn_serch_Click(object sender, EventArgs e)
  2.         {
  3.             int x = -1;
  4.             int y = -1;
  5.             FpSpread1.Search(0, txt_serch.Text, false, false, false, false, 0, 0, ref x, ref y);
  6.             if (x >= 0)
  7.             {
  8.                 //从x行0列开始总共1行10列被选择
  9.                 FpSpread1.ActiveSheetView.SelectionModel.SetSelection(x, 0, 1, 10);
  10.                 ClientScript.RegisterStartupScript(this.GetType(), "ScrollTo", "ScrollToRow(5);", true);
  11.             }            
  12.         }
复制代码

  1.     <script type="text/javascript" language="javascript">

  2.         var rowindex = 0;

  3.         function ScrollToRow(e) {
  4.             if (e != "" &amp;&amp; e != undefined) {
  5.                 rowindex = e;
  6.             }

  7.             if (FpSpread1.readyState == "complete") {
  8.                 FpSpread1.ScrollTo(rowindex, 0);
  9.             } else if (FpSpread1.readyState == "loading") {
  10.                 setTimeout(ScrollToRow, 500);
  11.             }
  12.         }
  13.     </script>
复制代码
回复 使用道具 举报
sdwd_lhq
注册会员   /  发表于:2012-12-28 13:07:00
7#
回复 6楼dof的帖子

感觉您的这种方法行不通,举个例子,在 FpSpread1中查找姓名是“张三”这个人,假如查询的结果中“张三”在第5页上,测试你的代码无效!

我的意思如果在第5页,要将页面自动翻到第5页,并高亮显示这条记录,不知我表达的是否明了?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-28 13:47:00
8#
回复 7楼sdwd_lhq的帖子

可在服务端通过CurrentPageIndex设置当前显示页的索引:
  1.         protected void btn_serch_Click(object sender, EventArgs e)
  2.         {
  3.             FpSpread1.ActiveSheetView.CurrentPageIndex = int.Parse(txt_page.Text,null);
  4.             ClientScript.RegisterStartupScript(this.GetType(), "ScrollTo", "ScrollToRow("+txt_row.Text+");", true);
  5.         }
复制代码


客户端通过AddSelection方法设置高亮:
  1.     <script type="text/javascript" language="javascript">
  2.         var rowindex = 0;
  3.         function ScrollToRow(e) {
  4.             if (e != "" &amp;&amp; e != undefined) {
  5.                 rowindex = e;
  6.             }
  7.             if (FpSpread1.readyState == "complete") {
  8.                 FpSpread1.ScrollTo(rowindex, 0);
  9.                 FpSpread1.ClearSelection();
  10.                 FpSpread1.AddSelection(rowindex, 0, 1, FpSpread1.GetColCount());
  11.             } else if (FpSpread1.readyState == "loading") {
  12.                 setTimeout(ScrollToRow, 500);
  13.             }
  14.         }
  15.     </script>
复制代码
回复 使用道具 举报
sdwd_lhq
注册会员   /  发表于:2012-12-30 09:39:00
9#
回复 8楼dof的帖子

根据你的代码我有了思路,就是用查找到的行号换算出该行所在的页号就可以了,但CurrentPageIndex我的怎么没有?我的控件版本4.0的?


快照4.jpg (49.34 KB, 下载次数: 1330)
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-31 11:51:00
10#
4.0中可以使用这个属性:
  1. FpSpread1.CurrentPage = 4;
复制代码
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部