效果:

代码:

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二级联动的更多相关文章

  1. select下拉二级联动

    function opt(){ var id = $("#ids").val(); $.ajax({   type: "POST",  url: "$ ...

  2. Dwz下拉菜单的二级联动

    在DWZ文档中对组合框combox的是这样描述的: 在传统的select 用class 定义:class=”combox”, html 扩展:保留原有属性name,  增加了属性:ref. ref 属 ...

  3. (实用篇)jQuery+PHP+MySQL实现二级联动下拉菜单

    二级联动下拉菜单选择应用在在很多地方,比如说省市下拉联动,商品大小类下拉选择联动.本文将通过实例讲解使用jQuery+PHP+MySQL来实现大小分类二级下拉联动效果. 先看下效果 大类:  前端技术 ...

  4. jQuery实现的3个基础案例(仿QQ列表分组,二级联动下拉框,模拟员工信息管理系统)

    1.仿QQ列表分组 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...

  5. Excel下拉选项二级联动

    在日常工作中,难免遇到操作excel的时候,二级联动下拉选项多用于像地市区县的应用场景 1)先把要联动的内容准备好,把它放到第二个sheet页中 2)操作级联的文本 全部选中之后,Ctrl+G -- ...

  6. JS实现下拉单的二级联动

    因工作需要,做了一个下拉单的二级联动. 第一级是固定的选项,有A.B两个选项,第二级的选项随着第一级选项的变化而变化. 一开始是这样的: HTML代码 <html> <head> ...

  7. 一个很好的JS,ASP二级下拉框联动。

    在我们制作网站会员注册信息时,一般会涉及到填写自己所在省/市,如果用input或textarea做成填写形式不太理想.所以大部分网站都会选择联动下来列表形式,做起来也不算很复杂,同时看上去也很轻松. ...

  8. ajax技术实现登录判断用户名是否重复以及利用xml实现二级下拉框联动,还有从数据库中获得

    今天学了ajax技术,特地在此写下来作为复习. 一.什么是ajax? 客户端(特指PC浏览器)与服务器,可以在[不必刷新整个浏览器]的情况下,与服务器进行异步通讯的技术  即,AJAX是一个[局部刷新 ...

  9. jq实现简单的二级联动下拉框

    1 效果图 2 html <!DOCTYPE html> <html lang="en"> <head>     <meta charse ...

随机推荐

  1. HDU 5977 Garden of Eden(点分治求点对路径颜色数为K)

    Problem Description When God made the first man, he put him on a beautiful garden, the Garden of Ede ...

  2. [leetcode]34.Find First and Last Position of Element in Sorted Array找区间

    Given an array of integers nums sorted in ascending order, find the starting and ending position of ...

  3. Selenium 学习汇总

    Commands (命令) Action 对当前状态进行操作 失败时,停止测试 Assertion 校验是否有产生正确的值 Element Locators 指定HTML中的某元素 Patterns ...

  4. vue 高阶 provide/inject

    1.一般情况使用都是在app.vue配置为: provide () {return {isTest: this}}, 2.所有子组件都可以引用 拿到app.vue里面的所有数据 inject: ['i ...

  5. Python开发——数据类型【元祖】

    元祖的定义 tu = (11,22,33,44,) print(tu) # (11, 22, 33, 44) tu = tuple((11,22,33,44,)) print(tu) # (11, 2 ...

  6. 21. pt-stalk

    pt-stalk 适用场景:MySQL Server 性能波动出现的频率很低.例如.几天一次MySQL Server 性能波动出现的机率很快.例如.几秒闪过 pt-stalk h=192.168.10 ...

  7. HQL数据查询基础

    HQL定义 1.Hibernate Query Language, Hibernate查询语言 2.HQL是面向对象的查询语言(HQL查询的主体是映射配置的持久化类及其属性而SQL查询主体是数据库表) ...

  8. 连接hive

    bin/hiveserver2 nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err & ...

  9. 执行PowerShell脚本的时候出现"在此系 统上禁止运行脚本"错误

    使用get-executionpolicy查看当前的脚本执行策略, 默认是Restricted, 也就是不允许任何脚本运行. 此时应该使用set-executionpolicy remotesigne ...

  10. python 在unix下json格式显示结果

    在使用命令号输出接口测试结果,发现无法按照期望的json格式进行显示.查阅资料发现python自带强大的工具. 直接上代码: import os,requests url = XXXXXX conte ...