Combox下拉绑定DataGridView

这个Combox下拉很多人都在用  但其中绘制的语句如下:

    #endregion
        #region 方法
        #region 绘制DataGridView以及下拉DataGridView
        private void DrawDataGridView()
        {
            DataGridView dataGridView = new DataGridView();
            dataGridView.ScrollBars = ScrollBars.Both;
            dataGridView.AutoSize = true;
            dataGridView.AllowUserToAddRows = false;
            dataGridView.AllowUserToDeleteRows = false;
            dataGridView.AllowUserToResizeRows = false;
            dataGridView.Dock = DockStyle.Fill;
            dataGridView.DataSource = null;

            dataGridView.BackgroundColor = SystemColors.Control;
            dataGridView.BorderStyle = BorderStyle.None;
            dataGridView.ReadOnly = true;
            dataGridView.AllowUserToAddRows = false;
            dataGridView.RowHeadersVisible = false;
            dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dataGridView.DoubleClick += new EventHandler(dataGridView_DoubleClick);
            dataGridView.KeyDown += new KeyEventHandler(dataGridView_KeyDown);

           //设置DataGridView的数据源
            Form frmDataSource = new Form();
            frmDataSource.Controls.Add(dataGridView);

            dataGridViewHost = new ToolStripControlHost(dataGridView);
            dataGridViewHost.AutoSize = m_blPopupAutoSize;
            TextBox textBox = new TextBox();
            textBox.Width = 200;
            textBox.TextChanged += new EventHandler(textBox_TextChanged);
            textBox.KeyDown += new KeyEventHandler(textBox_KeyDown);
            textBoxHost = new ToolStripControlHost(textBox);
            textBoxHost.AutoSize = false;

            dropDown = new ToolStripDropDown();
            dropDown.Items.Add(textBoxHost);
            dropDown.Items.Add(dataGridViewHost);
            dropDown.AutoSize = true;
        }
        #endregion

这个过程也很好理解  一个ToolStripDropDown控件  里面放了两个ToolStripControlHost,单机Combox就让这个ToolStripDropDown控件显示就行,问题在这句
            //设置DataGridView的数据源
            Form frmDataSource = new Form();
            frmDataSource.Controls.Add(dataGridView);
不理解其中的原因,dataGridView的dataSource是在程序外调用的,但是不用这句,下拉框里不绑定数据,为了让更直观理解 ,在放个例子:

public partial class Form2 : Form
    {
        private ToolStripControlHost dataGridViewHost;
        private ToolStripDropDown dropDown;
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            DataGridView dataGridView = new DataGridView();
            //Form frmDataSource = new Form();
            //frmDataSource.Controls.Add(dataGridView);
            //或者这个窗体的任何一个容器类添加这个dataGridView
            dataGridView.Dock = DockStyle.Fill;
            dataGridView.DataSource = createStudentTable();

            //设置DataGridView的数据源

            dataGridViewHost = new ToolStripControlHost(dataGridView);
            dropDown = new ToolStripDropDown();      

            dropDown.Items.Add(dataGridViewHost);
            contextMenuStrip1.Items.Add(dataGridViewHost);
        }

        /// <summary>
        /// 生产测试数据
        /// </summary>
        /// <returns></returns>
        private DataTable createStudentTable()
        {
            DataTable dt = new DataTable();
            DataColumn dc = new DataColumn("学号");
            dt.Columns.Add(dc);
            dc = new DataColumn("姓名");
            dt.Columns.Add(dc);
            dc = new DataColumn("性别");
            dt.Columns.Add(dc);
            dc = new DataColumn("专业");
            dt.Columns.Add(dc);
            dc = new DataColumn("入学年份");
            dt.Columns.Add(dc);

            DataRow dr = dt.NewRow();
            dr["学号"] = "20010101";
            dr["姓名"] = "刘德华";
            dr["性别"] = "男";
            dr["专业"] = "影视表演";
            dr["入学年份"] = "2001";
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["学号"] = "20010702";
            dr["姓名"] = "张学友";
            dr["性别"] = "男";
            dr["专业"] = "计算机科学技术";
            dr["入学年份"] = "2001";
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["学号"] = "20010403";
            dr["姓名"] = "郭富城";
            dr["性别"] = "男";
            dr["专业"] = "哲学系";
            dr["入学年份"] = "2001";
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["学号"] = "20010204";
            dr["姓名"] = "柳岩";
            dr["性别"] = "女";
            dr["专业"] = "模特专业(裸模方向)";
            dr["入学年份"] = "2001";
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["学号"] = "20010305";
            dr["姓名"] = "郭德纲";
            dr["性别"] = "男";
            dr["专业"] = "中文系";
            dr["入学年份"] = "2001";
            dt.Rows.Add(dr);

            return dt;
        }
    }

问题还是这样  如果不添加  右键弹出的GridView没有数据  注释掉那句  就有数据了,求解答。懂的人说

时间: 2024-10-29 00:25:16

Combox下拉绑定DataGridView的相关文章

DropDownList下拉绑定到GridView中实现功能

    前段时间有朋友让我帮着解决下DropDownList绑定到GridView的上遇到的问题,刚好这段时间自己也恰巧遇到了同样的需求,简单贴出代码讲解一下实现过程. <body> <form id="QualityAssessForm" runat="server"> <div> <asp:Panel runat="server" ID="panel1"> <div c

WPF ComboBox下拉绑定Treeview 功能的实现

因为项目需要,接触到这个功能点,借助网络还有自己的一点摸索,实现了这个功能.相关代码如下: XAML部分的代码: <ComboBox Grid.Row="0" Grid.Column="9" HorizontalAlignment="Left" Name="OrgaComboBox" Margin="6" VerticalAlignment="Top" Width="20

微信小程序picker下拉绑定数据

页面部分,wxml中写入以下代码 <picker mode = "selector" bindchange="bindPickerChange" value="{{project[idx].id}}" range="{{project}}" range-key="{{'val'}}"> <view class="picker picker1"> {{project

asp.net中如何绑定combox下拉框数据(调用存储过程)

#region 绑定类型(商品类型.仓库名称) public void DataType_Bind(int _peoid) { DataTable dt_goodsname = new DataTable(); dt_goodsname = stockbll.GetList_goodstype(_peoid).Tables[0];  //获取商品类别 this.cb_goodstype.Items.Clear(); foreach (DataRow dr in dt_goodsname.Rows

关于knockout下拉多选值的应用

在最近的开发过程中,应用了一些关于knockout的下拉项目. 关于下拉多选的开发在这里做一个记录. 下面直接上代码 添加的时候,无需给初始值 --viewmodel function ViewModel() { //岗位下拉绑定 this.postName = ko.observableArray([]); }; 添加了一个触发.根据部门获得对应的岗位 //根据部门ID去获得对应的岗位下拉选项 function jsSearchData(obj) { var depId = $(obj).va

C#中如何将combox中的下拉项和一个枚举中的各项进行绑定

实现一个combobox,将其各个下拉项与枚举进行绑定 效果图如下: 代码详解如下: 枚举: public enum StoreSite { /// <summary> /// 未知 /// </summary> [EnumTitle("未知")] None = 0, /// <summary> /// 北京 /// </summary> [EnumTitle("北京")] Beijing = 1, /// <s

winform dataGridView DataGridViewComboBoxColumn 下拉框事件

有一个dataGridView ,有一列是DataGridViewComboBoxColumn .用动态绑定,在绑定数据的时候.我们也给这一列绑定数据 在dataGridView的RowsAdded事件中写代码 /// <summary> /// 添加新行 /// </summary> /// <param name="sender"></param> /// <param name="e"></pa

DataGridView单元格内容自动匹配下拉显示

页面显示数据使用的控件是ComponentFactory.Krypton.Toolkit中的KryptonDataGridView控件.在指定“商品”单元格中需要根据用户输入内容自动匹配数据库中商品信息,并且单元格处于编辑模式时显示一个查询图标的按钮,点击该按钮也将显示数据库中所有商品信息. KryptonDataGridView显示控件此处命名为kDGVIndentDetail; 用于下拉显示匹配内容的DataGridView命名为dgv; 1.建立一个DataGridView类型的页面变量用

EXT学习之——Ext下拉框绑定以及级联写法

/*******步骤有四个,缺一不可*********/ function () {xxxxxx = Ext.extend(construct, {InitControl: function () { var _this = this; /*****************步骤一:建数据store ******************/ //一级下拉框数据(此处注意,一定要把store写在combobox控件定义的前面,否则无法加载数据) var moduleStore = new Ext.da