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 = 0; i < 20; i++)
            {
                DataRow dr = dt.NewRow();
                dr[0] = i+1;
                dr[1] = "戴尔笔记本";
                dr[2] = "00000"+(i+1).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 = 0; 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[1].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 = 0; i < 20; i++)
                {
                    DataRow dr = dt.NewRow();
                    dr[0] = str + i;
                    dr[1] = str + i;
                    dt.Rows.Add(dr);
                }
                ((DataGridViewComboBoxCell)this.dataGridView1.CurrentRow.Cells[4]).DataSource = dt;
                ((DataGridViewComboBoxCell)this.dataGridView1.CurrentRow.Cells[4]).DisplayMember = "text";
                ((DataGridViewComboBoxCell)this.dataGridView1.CurrentRow.Cells[4]).ValueMember = "id";
                ((ComboBox)sender).SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);

            }
        }
    }
} 

提示:此demo不需要链接数据库,只要在自己的窗体上创建一个datagridview命名为datagridview1即可。

原文地址:https://www.cnblogs.com/swjian/p/9082454.html

时间: 2024-08-29 19:55:38

C# DataGridView下DataGridViewComboBoxColumn二级联动的相关文章

select下拉二级联动

<li>号:<select id="ids" name="ids" onchange="opt()"> <c:forEach var="t" items="${terminal}"> <option value="${t.terminalid}" selected>${t.displayname}</option> </c

ajax技术实现登录判断用户名是否重复以及利用xml实现二级下拉框联动

今天学了ajax技术,特地在此写下来作为复习. 一.什么是ajax? 客户端(特指PC浏览器)与服务器,可以在[不必刷新整个浏览器]的情况下,与服务器进行异步通讯的技术  即,AJAX是一个[局部刷新]的[异步]通讯技术, 说白了就是局部刷新. 二.ajax的原理如下图 附上ajax与服务器之间的几种状态,但 4是所有浏览器都支持的的 三.ajax包含的技术如下图 四.ajax开发步骤 步一:创建ajax对象,例如:ajax = createAjax(); 步二:开启异步对象:例如:ajax.o

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

二级联动下拉菜单选择应用在在很多地方,比如说省市下拉联动,商品大小类下拉选择联动.本文将通过实例讲解使用jQuery+PHP+MySQL来实现大小分类二级下拉联动效果. 先看下效果 大类:  前端技术   程序开发   数据库   小类: 实现的效果就是当选择大类时,小类下拉框里的选项内容也随着改变.实现原理:根据大类的值,通过jQuery把值传给后台PHP处理,PHP通过查询MySQl数据库,得到相应的小类,并返回JSON数据给前端处理. XHTML 首先我们要建立两个下拉选择框,第一个是大类

struts2+spring+hibernate+dwr3实现下拉框二级联动

三大框架如何整合我这就不说了,csdn里很多大神都有详细整合博客. 因为是用spring管理了struts2和hibernate,所以我们只要把spring与dwr整合就行了. 首先我们需要dwr.jar我用的是最新的dwr3,之前测试过dwr2也是成功的. 先把我们的dwr.jar放到工程的lib目录下,再在web.xml的同等级目录下新建一个dwr.xml. 这是我的dwr.xml配置 <?xml version="1.0" encoding="UTF-8"

Asp.net MVC4 下二级联动

效果图: 主要文件有Index.cshtml ,ErJLDController.cs ,还有数据库文件 . 1.首先在数据库中创建省级.城市的表,我的表如下:我用了一张表放下了省级.城市的数据,用level划分省份和城市,parentId表示该城市所在省份的id 1 namespace Mvcproject.Controllers 2 { 3 //二级联动 4 public class ErJLDController : Controller 5 { 6 7 ZjbEntities db = n

Dwz下拉菜单的二级联动

在DWZ文档中对组合框combox的是这样描述的: 在传统的select 用class 定义:class=”combox”, html 扩展:保留原有属性name,  增加了属性:ref. ref 属性则是为了做级联定义的,ref所指向的则是当前combox值改变成引起联动的下一级combox,ref用下一级combox的id属性来赋值.注意:一般combox没必要设置id属性,只要级联时需要设置子级id等于父级ref,不同navTab和dialog中combox组件id必须唯一 以下是DWZ框

js省市二级联动菜单,IE6,FF下测试通过

<html> <head> <meta http-equiv="Content-Language" content="zh-cn" /> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>二级联动js,IE6,FF下测试通过</title> <s

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

1 效果图 2 html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compati

android:省市二级联动下拉框

全国省市xml文件下载 xml布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_par