(四十九)c#Winform自定义控件-下拉框(表格)

前提

入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。

GitHub:https://github.com/kwwwvagaa/NetWinformControl

码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git

如果觉得写的还行,请点个 star 支持一下吧

欢迎前来交流探讨: 企鹅群568015492 企鹅群568015492

麻烦博客下方点个【推荐】,谢谢

NuGet

Install-Package HZH_Controls

目录

https://www.cnblogs.com/bfyx/p/11364884.html

用处及效果

 1   List<DataGridViewColumnEntity> lstCulumns = new List<DataGridViewColumnEntity>();
 2             lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "ID", HeadText = "编号", Width = 70, WidthType = SizeType.Absolute });
 3             lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Name", HeadText = "姓名", Width = 100, WidthType = SizeType.Absolute });
 4             lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Age", HeadText = "年龄", Width = 100, WidthType = SizeType.Absolute });
 5             lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Birthday", HeadText = "生日", Width = 120, WidthType = SizeType.Absolute, Format = (a) => { return ((DateTime)a).ToString("yyyy-MM-dd"); } });
 6             lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Sex", HeadText = "性别", Width = 100, WidthType = SizeType.Absolute, Format = (a) => { return ((int)a) == 0 ? "" : ""; } });
 7             this.ucComboxGrid1.GridColumns = lstCulumns;
 8             List<object> lstSourceGrid = new List<object>();
 9             for (int i = 0; i < 100; i++)
10             {
11                 TestModel model = new TestModel()
12                 {
13                     ID = i.ToString(),
14                     Age = 3 * i,
15                     Name = "姓名——" + i,
16                     Birthday = DateTime.Now.AddYears(-10),
17                     Sex = i % 2
18                 };
19                 lstSourceGrid.Add(model);
20             }
21             this.ucComboxGrid1.GridDataSource = lstSourceGrid;

 

准备工作

此控件继承自UCCombox,并且需要表格控件UCDataGridView,如果不了解请移步查看

(三十五)c#Winform自定义控件-下拉框

(三十二)c#Winform自定义控件-表格

如果你想显示树形结构,请移步查看

(四十七)c#Winform自定义控件-树表格(treeGrid)

开始

我们首先需要一个弹出的面板,那么我们先添加一个用户控件UCComboxGridPanel,在这个用户控件上添加一个文本框进行搜索,添加一个表格展示数据

一些属性

 1  [Description("项点击事件"), Category("自定义")]
 2         public event DataGridViewEventHandler ItemClick;
 3         private Type m_rowType = typeof(UCDataGridViewRow);
 4 
 5         public Type RowType
 6         {
 7             get { return m_rowType; }
 8             set
 9             {
10                 m_rowType = value;
11                 this.ucDataGridView1.RowType = m_rowType;
12             }
13         }
14 
15         private List<DataGridViewColumnEntity> m_columns = null;
16 
17         public List<DataGridViewColumnEntity> Columns
18         {
19             get { return m_columns; }
20             set
21             {
22                 m_columns = value;
23                 this.ucDataGridView1.Columns = value;
24             }
25         }
26         private List<object> m_dataSource = null;
27 
28         public List<object> DataSource
29         {
30             get { return m_dataSource; }
31             set { m_dataSource = value; }
32         }
33 
34         private string strLastSearchText = string.Empty;
35         UCPagerControl m_page = new UCPagerControl();

一些事件,处理数据绑定

 1  void ucDataGridView1_ItemClick(object sender, DataGridViewEventArgs e)
 2         {
 3             if (ItemClick != null)
 4             {
 5                 ItemClick((sender as IDataGridViewRow).DataSource, null);
 6             }
 7         }
 8 
 9         void txtInput_TextChanged(object sender, EventArgs e)
10         {
11             timer1.Enabled = false;
12             timer1.Enabled = true;
13         }
14 
15         private void UCComboxGridPanel_Load(object sender, EventArgs e)
16         {
17             m_page.DataSource = m_dataSource;
18             this.ucDataGridView1.DataSource = m_page.GetCurrentSource();
19         }
20 
21         private void timer1_Tick(object sender, EventArgs e)
22         {
23             if (strLastSearchText == txtSearch.InputText)
24             {
25                 timer1.Enabled = false;
26             }
27             else
28             {
29                 strLastSearchText = txtSearch.InputText;
30                 Search(txtSearch.InputText);
31             }
32         }
33 
34         private void Search(string strText)
35         {
36             m_page.StartIndex = 0;
37             if (!string.IsNullOrEmpty(strText))
38             {
39                 strText = strText.ToLower();
40                 List<object> lst = m_dataSource.FindAll(p => m_columns.Any(c => (c.Format == null ? (p.GetType().GetProperty(c.DataField).GetValue(p, null).ToStringExt()) : c.Format(p.GetType().GetProperty(c.DataField).GetValue(p, null))).ToLower().Contains(strText)));
41                 m_page.DataSource = lst;
42             }
43             else
44             {
45                 m_page.DataSource = m_dataSource;
46             }
47             m_page.Reload();
48         }

完整代码

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Drawing;
  5 using System.Data;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Windows.Forms;
  9 
 10 namespace HZH_Controls.Controls.ComboBox
 11 {
 12     [ToolboxItem(false)]
 13     public partial class UCComboxGridPanel : UserControl
 14     {
 15         [Description("项点击事件"), Category("自定义")]
 16         public event DataGridViewEventHandler ItemClick;
 17         private Type m_rowType = typeof(UCDataGridViewRow);
 18 
 19         public Type RowType
 20         {
 21             get { return m_rowType; }
 22             set
 23             {
 24                 m_rowType = value;
 25                 this.ucDataGridView1.RowType = m_rowType;
 26             }
 27         }
 28 
 29         private List<DataGridViewColumnEntity> m_columns = null;
 30 
 31         public List<DataGridViewColumnEntity> Columns
 32         {
 33             get { return m_columns; }
 34             set
 35             {
 36                 m_columns = value;
 37                 this.ucDataGridView1.Columns = value;
 38             }
 39         }
 40         private List<object> m_dataSource = null;
 41 
 42         public List<object> DataSource
 43         {
 44             get { return m_dataSource; }
 45             set { m_dataSource = value; }
 46 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值