首页 > 代码库 > Winform开窗,筛选数据后返回数据的方法

Winform开窗,筛选数据后返回数据的方法

在开发中,经常需要打开另一个窗体(简写为“开窗”),然后在开窗中进行数据筛选,选中需要的数据,最后将值传递给本原来的窗体。而且,这个开窗可以重复用于多个地方,其效果如同日历控件的弹出窗口。如下图所示:

                      

测试环境

vs2008

 

基本思路

1、创建一个窗体类。

    (1)为该类添加用于传递值的属性。

    (2)为该类添加一个事件,用于通知调用方值已经准备好。

    (3)在窗体类的某个函数中,如单元格双击处理函数中,为属性赋值,并引发这个事件。

2、调用该窗体类。

    (1)定义一个全局的窗体类对象。

    (2)在调用函数中,初始窗体对象,注册一个事件处理函数。

    (3)在事件处理函数中,就可以使用上面定义的属性值。

 

 

创建窗体类

1、添加一个名为lookup的窗体,在上面布置如下的控件:

 

 

2、定义2个属性。

        /// <summary>
        /// 用户编号
        /// </summary>
        public string UserId
        {
            get
            {
                return _UserId;
            }
        }
        string _UserId;


        /// <summary>
        /// 用户名
        /// </summary>
        public string UserName
        {
            get
            {
                return _UserName;
            }
        }
        string _UserName;

 

3、添加1个名为DataSelected的事件。

        public event EventHandler DataSelected;

 

4、在dataGridView控件的CellDoubleClick事件处理函数中,为2个属性赋值,引发DataSelected事件。

        private void dataGridView1_CellDoubleClick( object sender, DataGridViewCellEventArgs e )
        {
            if( this.DataSelected != null )
            {
                this._UserId = dataGridView1.Rows[ e.RowIndex ].Cells[ "userId" ].Value.ToString();
                this._UserName = dataGridView1.Rows[ e.RowIndex ].Cells[ "userName" ].Value.ToString();
                // 引发事件
                this.DataSelected( null, null );  
            }
            this.Close();  // 关闭本窗体
        }

 

 

调用该窗体类

1、新建一个窗体,在上面放置如下的控件:

 

 

2、定义一个全局的lookup对象。

 Lookup lookup;

 

3、在按钮的单击事件中进行如下处理:

        private void button1_Click( object sender, EventArgs e )
        {
            lookup = new Lookup();
            lookup.DataSelected += new EventHandler( lookup_DataSelected );
            lookup.Show();
        }

 

4、处理DataSelected事件

        void lookup_DataSelected( object sender, EventArgs e )
        {
            textBox1.Text = lookup.UserId;
            textBox2.Text = lookup.UserName;
        }

 

示例代码下载