C# DataGridView下DataGridViewComboBoxColumn二级联动
效果:

代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; namespace DataGridViewDownComboBoxDemo
{
public partial class Form1 : Form
{
//级联的列
DataGridViewComboBoxColumn columns3 = null;
public Form1()
{ InitializeComponent();
this.dataGridView1.DataError += delegate (object sender, DataGridViewDataErrorEventArgs e) { };
}
/// <summary>
/// 绑定GRIDVIEW
/// </summary>
public void GetData()
{
//第二列
DataGridViewComboBoxColumn columns2 = new DataGridViewComboBoxColumn();
columns2.Name = "col2";
columns2.DataPropertyName = "Type"; //从数据源绑定列,这一列就是那个值
columns2.HeaderText = "货区";
string[] strTmp = new string[] { "货区A", "货区B", "货区C" , "货区D", "货区E", "货区F" };
DgvCombobox(ref columns2, strTmp);//此方法是定义的关键
//第三列
columns3 = new DataGridViewComboBoxColumn();
columns3.Name = "col3";
columns3.HeaderText = "货架";
//生成gridview数据源
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("序号"));
dt.Columns.Add(new DataColumn("物资名称"));
dt.Columns.Add(new DataColumn("物资编号"));
for (int i = ; i < ; i++)
{
DataRow dr = dt.NewRow();
dr[] = i+;
dr[] = "戴尔笔记本";
dr[] = ""+(i+).ToString();
dt.Rows.Add(dr);
}
this.dataGridView1.DataSource = dt;
//gridview添加列
dataGridView1.Columns.AddRange(new DataGridViewColumn[] { columns2, columns3 });
}
/// <summary>
/// 绑定第二列
/// </summary>
/// <param name="column"></param>
/// <param name="strTmp"></param>
public void DgvCombobox(ref DataGridViewComboBoxColumn column, string[] strTmp)
{
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("tmp", typeof(string));
dt.Columns.Add(dc);
dt.Columns.Add(new DataColumn("ID", typeof(string)));
DataRow dr;
for (int i = ; i < strTmp.Length; i++)
{
dr = dt.NewRow();
dr["tmp"] = strTmp[i];
dr["id"] = i;
dt.Rows.Add(dr);
}
//为combobox绑定生成的表
column.DataSource = dt; //combobox列的数据源,绑定为生成的表
column.DisplayMember = "tmp";//要显示的名称,表的文字例
column.ValueMember = dt.Columns[].ToString();//文字对应的值,此列将和columns2.DataPropertyName 属性的值对应来显示选中的值 }
private void Form1_Load(object sender, EventArgs e)
{
this.GetData();
}
//添加委托事件
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (this.dataGridView1.CurrentCell.OwningColumn.Name == "col2")
{
((ComboBox)e.Control).SelectedIndexChanged +=
new EventHandler(ComboBox_SelectedIndexChanged);
}
} private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.dataGridView1.CurrentCell.OwningColumn.Name == "col2")
{ string str = ((ComboBox)sender).Text.ToString();
//绑定第二个COMBOX
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("id"));
dt.Columns.Add(new DataColumn("text")); for (int i = ; i < ; i++)
{
DataRow dr = dt.NewRow();
dr[] = str + i;
dr[] = str + i;
dt.Rows.Add(dr);
}
((DataGridViewComboBoxCell)this.dataGridView1.CurrentRow.Cells[]).DataSource = dt;
((DataGridViewComboBoxCell)this.dataGridView1.CurrentRow.Cells[]).DisplayMember = "text";
((DataGridViewComboBoxCell)this.dataGridView1.CurrentRow.Cells[]).ValueMember = "id";
((ComboBox)sender).SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged); }
}
}
}
提示:此demo不需要链接数据库,只要在自己的窗体上创建一个datagridview命名为datagridview1即可。
datagridview1的EditMode设为EditOnEnter可实现点击一次就出下拉列表。
C# DataGridView下DataGridViewComboBoxColumn二级联动的更多相关文章
- select下拉二级联动
function opt(){ var id = $("#ids").val(); $.ajax({ type: "POST", url: "$ ...
- Dwz下拉菜单的二级联动
在DWZ文档中对组合框combox的是这样描述的: 在传统的select 用class 定义:class=”combox”, html 扩展:保留原有属性name, 增加了属性:ref. ref 属 ...
- (实用篇)jQuery+PHP+MySQL实现二级联动下拉菜单
二级联动下拉菜单选择应用在在很多地方,比如说省市下拉联动,商品大小类下拉选择联动.本文将通过实例讲解使用jQuery+PHP+MySQL来实现大小分类二级下拉联动效果. 先看下效果 大类: 前端技术 ...
- jQuery实现的3个基础案例(仿QQ列表分组,二级联动下拉框,模拟员工信息管理系统)
1.仿QQ列表分组 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...
- Excel下拉选项二级联动
在日常工作中,难免遇到操作excel的时候,二级联动下拉选项多用于像地市区县的应用场景 1)先把要联动的内容准备好,把它放到第二个sheet页中 2)操作级联的文本 全部选中之后,Ctrl+G -- ...
- JS实现下拉单的二级联动
因工作需要,做了一个下拉单的二级联动. 第一级是固定的选项,有A.B两个选项,第二级的选项随着第一级选项的变化而变化. 一开始是这样的: HTML代码 <html> <head> ...
- 一个很好的JS,ASP二级下拉框联动。
在我们制作网站会员注册信息时,一般会涉及到填写自己所在省/市,如果用input或textarea做成填写形式不太理想.所以大部分网站都会选择联动下来列表形式,做起来也不算很复杂,同时看上去也很轻松. ...
- ajax技术实现登录判断用户名是否重复以及利用xml实现二级下拉框联动,还有从数据库中获得
今天学了ajax技术,特地在此写下来作为复习. 一.什么是ajax? 客户端(特指PC浏览器)与服务器,可以在[不必刷新整个浏览器]的情况下,与服务器进行异步通讯的技术 即,AJAX是一个[局部刷新 ...
- jq实现简单的二级联动下拉框
1 效果图 2 html <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
随机推荐
- spring整合mybatis在使用.properties文件时候遇到的问题
在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致P ...
- 258. Add Digits 入学考试:数位相加
[抄题]: Given a non-negative integer num, repeatedly add all its digits until the result has only one ...
- 386. Lexicographical Numbers 输出1到n之间按lexico排列的数字序列
[抄题]: Given an integer n, return 1 - n in lexicographical order. For example, given 13, return: [1,1 ...
- LinkedList 源码实现
闲暇之余,准备将Java 一些常用的数据结构进行重新的剖析,并记录博客比如LinkedList ,HashMap ,HashTable ,以及并发包所引入的集合,在博客中会陆续更新 start 哈哈, ...
- 视觉和imu融合的算法研究
融合方式概述 同SLAM发展过程类似,视觉融合IMU问题也可以分成基于滤波和基于优化两大类. 同时按照是否把图像特征信息加入状态向量来进行分类,可以分为松耦合和紧耦合两大类. 一.基于滤波的融合算法 ...
- Myisam 和 Innodb 区别
MySQL默认采用的是MyISAM. MyISAM不支持事务,而InnoDB支持.InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所以 ...
- [转载] ul li css 做横向菜单
原文地址: http://www.cnblogs.com/amylis_chen/archive/2011/09/24/2188398.html 第一步:建立一个无序列表 我们先建立一个无序列表,来建 ...
- WPF 凭证分录控件
凭证分录编辑控件,效果如下: 源码:https://gitee.com/orchis/VoucherGridCtl.git
- AX_Dialog
Dialog dialog = new Dialog("@SYS1052"); DialogField ...
- sleep() 和 wait() 区别
sleep()不释放同步锁,wait()释放同步锁 sleep()的作用是让线程休眠指定的时间,时间到后自动恢复线程执行.运行的主动权是由线程决定的. wait()可以用notify()直接唤起,运行 ...