找回密码
 立即注册

QQ登录

只需一步,快速开始

lh8350

论坛元老

33

主题

80

帖子

2万

积分

论坛元老

积分
23275

活字格认证

lh8350
论坛元老   /  发表于:2012-7-13 11:44  /   查看:6731  /  回复:6
1.jpg (16.81 KB, 下载次数: 253)

6 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-7-13 13:54:00
沙发
你可以参考你之前另外一个帖子中4楼的回复,http://gcdn.grapecity.com/showtopic-5162.html
只需要将下面代码中方法的参数就可以了:
  1.         fpSpread1.ActiveSheet.AutoFilterColumn(1, "20", 1);
  2.         fpSpread1.ActiveSheet.AutoFilterColumn(2, "女", 1);
复制代码
回复 使用道具 举报
lh8350
论坛元老   /  发表于:2012-7-13 15:04:00
板凳
public void Form1_Load(object sender, EventArgs e)
        {

            DataTable dt = new DataTable();

            dt.Columns.Add("姓名");

            dt.Columns.Add("年龄");

            dt.Columns.Add("性别");



            dt.Rows.Add("AAA", "20", "女");
            dt.Rows.Add("fff", "20", "女");
            dt.Rows.Add("rr", "20", "女");

            dt.Rows.Add("bbb", "20", "男");
            dt.Rows.Add("op", "20", "男");
            dt.Rows.Add("opo", "20", "男");

            dt.Rows.Add("ccc", "22", "女");

            dt.Rows.Add("ddd", "23", "女");

            dt.Rows.Add("eee", "24", "女");



            fpSpread1.ActiveSheet.DataSource = dt;

            fpSpread1.ActiveSheet.Columns[0, 2].AllowAutoFilter = true;

        }

        private void button1_Click(object sender, EventArgs e)
        {

            if (textBox1.Text == "")
            {
                MessageBox.Show("请您输入您要选择的年龄");
                return;
            }
            else
            {
                fpSpread1.ActiveSheet.AutoFilterColumn(1, textBox1.Text, 1);

                if (textBox2.Text == "")
                {
                    return;
                }
                else
                {
                    fpSpread1.ActiveSheet.AutoFilterColumn(2, textBox2.Text, 1);

                }
            }
        }
1)我是这样写的。但是存在的问题是,如果我先选的年龄为20,性别为空,会全部选出来。但是如果我先选年龄为20,性别为男的,可以选出所有20的男,如果在此基础上再选只是年龄为20的,就不出来包含男女的最初的数据了。这个筛选只是针对当前筛选后的spread表格,怎样才能回到最初,选择20岁,能出来所有20岁的同学呢,包含男的和女的。

2)还有一个问题,如果我把这个筛选做成右键菜单,是筛选右键点击的所在列的一定范围内的值该怎么实现呢?不好意思,因为初学,所以可能问题有些含糊不清,抱歉!
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-7-13 15:37:00
地板
问题一:
可以在button1_Click()方法的else中添加两行代码:

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3.     fpSpread1.ActiveSheet.ClearRowFilter();
  4.     fpSpread1.ActiveSheet.Columns[0, 2].AllowAutoFilter = true;
  5.     if (textBox1.Text == "")
  6.     {
  7.         MessageBox.Show("请您输入您要选择的年龄");
  8.         return;
  9.     }
  10.     else
  11.     {
  12.         fpSpread1.ActiveSheet.AutoFilterColumn(1, textBox1.Text, 1);

  13.         if (textBox2.Text == "")
  14.         {
  15.             return;
  16.         }
  17.         else
  18.         {
  19.             fpSpread1.ActiveSheet.AutoFilterColumn(2, textBox2.Text, 1);

  20.         }
  21.     }
  22. }
复制代码


第二个问题可以先参考显示右键菜单的方法,然后给右键菜单的单击事件添加过滤代码:
http://gcdn.grapecity.com/showtopic-1057.html
回复 使用道具 举报
lh8350
论坛元老   /  发表于:2012-7-13 15:46:00
5#
多谢!!多谢!!太棒了!!
回复 使用道具 举报
lh8350
论坛元老   /  发表于:2012-7-13 16:20:00
6#
还有一个问题,如何获取右键点击列的列头呢?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-7-13 16:38:00
7#
你可以参考这两个帖子,在取到HitTestInformation 之后,判断Type是否为ColumnHeader:
http://gcdn.grapecity.com/showtopic-1057.html
http://gcdn.grapecity.com/showtopic-3557.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部