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 ...
随机推荐
- jq怎么给图片绑定上传文件按钮
html代码 <img src="/img/zhengmian.png" alt="" class="file1"> <i ...
- thinkphp5中使用excel导出数据表格(包涵图片)
首先使用composer require phpoffice/phpexcel下载安装phpexcel包. 将包放入extend下面. 不附加图片的导出 /** * 导出excel(不带图片) * @ ...
- LAB4
鼠标放上去可以看文件说明,exception则在exception中处理 文件头里面穿信息,为404 out.flush();把以前的全部冲掉了,所以需要放在后面
- pythonj基础(六)函数初识
一.什么是函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以 ...
- Socket 多线程编程
前面一片学习了TCP/IP的基础网络编程,并给出了简单的服务端与客户端通信交互的例子.还介绍了UPC的通信例子. 这次学习TCP/IP的多线程编程.因为涉及到TCP/IP一般都是多线程,服务端会一直监 ...
- Linux移植之tag参数列表解析过程分析
在Linux移植之内核启动过程start_kernel函数简析中已经指出了start_kernel函数的调用层次,这篇主要是对具体的tag参数列表进行解析. 1.内存参数ATAG_MEM参数解析 2. ...
- huawei FPGA方案
https://indico.cern.ch/event/669648/contributions/2838181/attachments/1581893/2500031/Huawei_Cloud_F ...
- Luogu3119 草鉴定-Tarjan+Topsort
Solution 简单的$Tarjan$题. 有大佬现成博客 就不写了 → 传送门 Code #include<cstdio> #include<cstring> #inclu ...
- redis在游戏服务器中的使用初探(四) redis应用
文章系列先介绍环境搭建 介绍redis操作和代码编写运行 这是典型的实战工程过程.那么我们为何要使用redis而不是常规的数据库比如 mysql呢? 因为KV内存数据库最大的优势所有数据全部存储在内 ...
- 【APP测试(Android)】--安装卸载