惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
Cisco Talos Blog
Cisco Talos Blog
MongoDB | Blog
MongoDB | Blog
IT之家
IT之家
N
News and Events Feed by Topic
博客园 - 叶小钗
Help Net Security
Help Net Security
美团技术团队
Attack and Defense Labs
Attack and Defense Labs
雷峰网
雷峰网
S
Security @ Cisco Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
AI
AI
Hacker News: Ask HN
Hacker News: Ask HN
T
The Blog of Author Tim Ferriss
Security Latest
Security Latest
Last Week in AI
Last Week in AI
S
Secure Thoughts
Simon Willison's Weblog
Simon Willison's Weblog
TaoSecurity Blog
TaoSecurity Blog
N
News and Events Feed by Topic
A
Arctic Wolf
Y
Y Combinator Blog
MyScale Blog
MyScale Blog
Cyberwarzone
Cyberwarzone
酷 壳 – CoolShell
酷 壳 – CoolShell
S
SegmentFault 最新的问题
罗磊的独立博客
Vercel News
Vercel News
D
DataBreaches.Net
博客园 - 聂微东
P
Palo Alto Networks Blog
N
News | PayPal Newsroom
GbyAI
GbyAI
B
Blog
A
About on SuperTechFans
PCI Perspectives
PCI Perspectives
S
Schneier on Security
Apple Machine Learning Research
Apple Machine Learning Research
I
InfoQ
The GitHub Blog
The GitHub Blog
P
Privacy International News Feed
Blog — PlanetScale
Blog — PlanetScale
博客园_首页
T
The Exploit Database - CXSecurity.com
V
Vulnerabilities – Threatpost
aimingoo的专栏
aimingoo的专栏
Google DeepMind News
Google DeepMind News

博客园 - 武广敬

There is no mode by that name loaded / mode not given 产生原因(个案) 使用VS调试JS 使用U盘安装Windows Server2008 德广火车票助手登录12306代码详解-登录 德广火车票助手源码 请各位前辈给些建议 用户中心 - 博客园 vs2008 SmartDevice 程序 访问Internet时出错 提示:未能建立与网络的连接。解决方案 关于微软有自增列父子表更新程序的问题 免费的网上问卷调查程序 在线HTML标签验证工具.很好用的. 微软扶持软件公司计划 使用Visual Studio生成安装程序并设定连接字符串及其他自定义操作. - 武广敬 - 博客园 新鲜出炉的Asp.Net MVC电子书 我理解的云计算 设定了窗口的AcceptButton及CancelButton点击时无动作的原因 使用电脑+MODEM 订火车票 (可以一直自动重拨) 黄牛党/铁路内部人员不得进入!!! UI设计注意点 通过反射得到对象 DataGridViewComboBoxColumn 可以让用户输入并自动匹配选项的问题 [问了很多人,找了很多站都没得到答案,所以只好放首页,请管理员体谅.谢谢!]
可以让DataGridView中多个ComboBox级联的工具类-初版
武广敬 · 2009-01-08 · via 博客园 - 武广敬

RelateComboBoxHelper
    /// <summary>
    
/// Author:武广敬
    
/// Blog:tonyepaper.cnblogs.com
    
/// 级联菜单帮助类
    
/// </summary>
    public class RelateComboBoxHelper
    {
        
//未筛选的数据源
        private static BindingSource[] _unFilterBS = new BindingSource[10];
        
//筛选后的数据源
        private static BindingSource[] _filterBS = new BindingSource[10];
        
//级联主选单
        private static string[] _sourceComboBoxName;
        
//级联选单
        private static string[] _filterComboBoxName;
        
//Ex:"GoodsNo='{0}'"
        private static string[] _filterExpression;
        
/// <summary>
        
/// 处理有级联的DataGridViewComboBoxColumn,使从属DataGridViewComboBoxColumn
        
/// 可以根据父DataGridViewComboBoxColumn的值改变自身的数据源
        
/// </summary>
        
/// <param name="dataGridView">需要处理级联的DataGridView</param>
        
/// <param name="sourceComboBoxName">级联父DataGridViewComboBoxColumn</param>
        
/// <param name="filterComboBoxName">级联子DataGridViewComboBoxColumn</param>
        
/// <param name="dataSource">级联子DataGridViewComboBoxColumn的数据源DataTable</param>
        
/// <param name="filterExpression">级联子DataGridViewComboBoxColumn根据父DataGridViewComboBoxColumn改变的筛选表达式 Ex:"GoodsNo='{0}'"</param>
        public static void BuildComboBox(DataGridView dataGridView, string sourceComboBoxName, string filterComboBoxName, DataTable dataSource, string filterExpression)
        {
            BuildComboBox(dataGridView, 
new string[] { sourceComboBoxName }, new string[] { filterComboBoxName }, new DataTable[] { dataSource }, new string[] { filterExpression });
        }
        
/// <summary>
        
/// 处理有级联的DataGridViewComboBoxColumn,使从属DataGridViewComboBoxColumn(使用下拉选单本身的数据源)
        
/// 可以根据父DataGridViewComboBoxColumn的值改变自身的数据源
        
/// </summary>
        
/// <param name="dataGridView">需要处理级联的DataGridView</param>
        
/// <param name="sourceComboBoxName">级联父DataGridViewComboBoxColumn</param>
        
/// <param name="filterComboBoxName">级联子DataGridViewComboBoxColumn</param>
        
/// <param name="filterExpression">级联子DataGridViewComboBoxColumn根据父DataGridViewComboBoxColumn改变的筛选表达式 Ex:"GoodsNo='{0}'"</param>
        public static void BuildComboBox(DataGridView dataGridView, string sourceComboBoxName, string filterComboBoxName, string filterExpression)
        {
            BuildComboBox(dataGridView, 
new string[] { sourceComboBoxName }, new string[] { filterComboBoxName }, new DataTable[] { (dataGridView.Columns[filterComboBoxName] as DataGridViewComboBoxColumn).DataSource as DataTable }, new string[] { filterExpression });
        }
        
/// <summary>
        
/// 处理多个级联的下拉选单
        
/// </summary>
        
/// <param name="dataGridView">需要处理级联的DataGridView</param>
        
/// <param name="sourceComboBoxName">级联父DataGridViewComboBoxColumn</param>
        
/// <param name="filterComboBoxName">级联子DataGridViewComboBoxColumn</param>
        
/// <param name="dataSource">级联子DataGridViewComboBoxColumn的数据源DataTable</param>
        
/// <param name="filterExpression">级联子DataGridViewComboBoxColumn根据父DataGridViewComboBoxColumn改变的筛选表达式 Ex:"GoodsNo='{0}'"</param>
        public static void BuildComboBox(DataGridView dataGridView, string[] sourceComboBoxName, string[] filterComboBoxName, DataTable[] dataSource, string[] filterExpression)
        {
            
try
            {
                dataGridView.CellBeginEdit 
+= new DataGridViewCellCancelEventHandler(dataGridView_CellBeginEdit);
                dataGridView.CellEndEdit 
+= new DataGridViewCellEventHandler(dataGridView_CellEndEdit);for (int i = 0; i < sourceComboBoxName.Length; i++)
                {
                    _unFilterBS[i] 
= new BindingSource();
                    _unFilterBS[i].DataSource 
= dataSource[i];
                    _filterBS[i] 
= new BindingSource();
                    _filterBS[i].DataSource 
= dataSource[i];
                    (dataGridView.Columns[filterComboBoxName[i]] 
as DataGridViewComboBoxColumn).DataSource = _unFilterBS[i];
                }
                _filterComboBoxName 
= filterComboBoxName;
                _sourceComboBoxName 
= sourceComboBoxName;
                _filterExpression 
= filterExpression;
            }
            
catch (Exception ex)
            {
                
throw ex;
            }

        }

/// <summary>
        
/// 处理多个级联的下拉选单(使用下拉选单本身的数据源)
        
/// </summary>
        
/// <param name="dataGridView">需要处理级联的DataGridView</param>
        
/// <param name="sourceComboBoxName">级联父DataGridViewComboBoxColumn</param>
        
/// <param name="filterComboBoxName">级联子DataGridViewComboBoxColumn</param>
        
/// <param name="filterExpression">级联子DataGridViewComboBoxColumn根据父DataGridViewComboBoxColumn改变的筛选表达式 Ex:"GoodsNo='{0}'"</param>
        public static void BuildComboBox(DataGridView dataGridView, string[] sourceComboBoxName, string[] filterComboBoxName, string[] filterExpression)
        {
            DataTable[] datasource 
= new DataTable[filterComboBoxName.Length];
            
for (int i = 0; i < sourceComboBoxName.Length; i++)
            {
                datasource[i] 
= (dataGridView.Columns[filterComboBoxName[i]] as DataGridViewComboBoxColumn).DataSource as DataTable;
            }
            BuildComboBox(dataGridView, sourceComboBoxName, filterComboBoxName, datasource, filterExpression);
        }
static void dataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            DataGridView datagridView 
= sender as DataGridView;try
            {
                
for (int i = 0; i < _sourceComboBoxName.Length; i++)
                {
                    
if (e.ColumnIndex == datagridView.Columns[_filterComboBoxName[i]].Index)
                    {
                        DataGridViewComboBoxCell filterComboBox 
= datagridView.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewComboBoxCell;
                        filterComboBox.DataSource 
= _filterBS[i];
                        DataGridViewComboBoxCell sourceComboBox 
= datagridView.Rows[e.RowIndex].Cells[_sourceComboBoxName[i]] as DataGridViewComboBoxCell;
                        _filterBS[i].Filter 
= string.Format(_filterExpression[i], sourceComboBox.FormattedValue);
                    }
                }
            }
            
catch (Exception ex)
            {
                
throw ex;
            }
        }
static void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            DataGridView datagridView 
= sender as DataGridView;
            
try
            {
                
for (int i = 0; i < _sourceComboBoxName.Length; i++)
                {
                    
if (e.ColumnIndex == datagridView.Columns[_filterComboBoxName[i]].Index)
                    {
                        DataGridViewComboBoxCell filterComboBox 
= datagridView.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewComboBoxCell;
                        filterComboBox.DataSource 
= _unFilterBS[i];
                        _filterBS[i].RemoveFilter();
                    }
                }
            }
            
catch (Exception ex)
            {
                
throw ex;
            }
        }
    }

使用方法

Code
RelateComboBoxHelper.BuildComboBox(DataGridViewName, "级联父列名-如部门""级联子列名-如部门成员", 所有部门成员数据的DataTable(需要包含[DeptNo列]),"子列名根据父列名筛选内容的筛选字串DeptNo='{0}'");