替换datagridview列控件内容 +自定义下拉控件

本文介绍了如何在Winform应用中使用C#为DataGridView添加多选下拉框功能。通过自定义列控件或替换列内容来实现,详细展示了代码实现过程,包括创建自定义下拉控件、添加事件处理和数据绑定等步骤。
摘要由CSDN通过智能技术生成

Datagridview添加多选下拉框方式有很多种:

1:自定义datagridview列控件

下一篇文章加上

2:替换datagridview列控件内容 +自定义下拉控件

  private void dataGridView1_CurrentCellChanged(object sender, EventArgs e)
        {
            if (dataGridView1.CurrentCell == null) return;
           
            string cell_name = dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].Name;//获取列名
            if (cell_name == "Purchaser" && dataGridView1.Columns["Purchaser"].ReadOnly==false) //判断列名
            {
                /// 根据事件替换datagridview内容控件
                MultiSelect checkedbox = new MultiSelect();//自定义下拉多选
                dataGridView1.Controls.Add(checkedbox);//datagridview添加控件
                checkedbox.Name = "CheckedComboBox";
                checkedbox.DisplayMember = "name";
                checkedbox.ValueMember = "id";
                checkedbox.Size = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[7].Size;//设置大小
                Rectangle rec = dataGridView1.GetCellDisplayRectangle(dataGridView1.CurrentCell.ColumnIndex, dataGridView1.CurrentCell.RowIndex, false);
                checkedbox.Left = rec.Left;
                checkedbox.Top = rec.Top;
                checkedbox.Width = rec.Width;
                checkedbox.Height = rec.Height;
                checkedbox.Visible = true;
                enter_checkedbox(checkedbox);
                checkedbox.Leave += new EventHandler(purchae_mouseleave);//添加焦点离开事件
                checkedbox.Rowindex = dataGridView1.CurrentRow.Index;
                checkedbox.DataSource = ClassInquriyData.dataset.Tables[0];//绑定数据源

                string where = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[7].Value != null ? dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[7].Value.ToString() : "";//获取datagridview单元格数据
                //如果有数据就要赋初始值
                if (string.IsNullOrEmpty(where))
                {


                    checkedbox.Location = rec.Location;//显示位置

                }
                else
                {
                    string[] content = where.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    string index = string.Empty;
                    int s = 0;
                    for (int i = 0; i < content.Length; i++)
                    {
                        string checkedname = content[i].ToString();
                        foreach (DataRow item in ClassInquriyData.dataset.Tables[0].Rows)
                        {
                            if (checkedname.Equals(item["name"].ToString()))
                            {
                                index += s + ",";
                                continue;
                            }
                            s++;
                        }
                        s = 0;
                    }
                    checkedbox.SetItemchecked = index;//设置选定项
                    dataGridView1.Controls.Add(checkedbox);//datagridview添加控件
                    checkedbox.Location = rec.Location;//显示位置
                }

            }
        }

       /// <summary>
        /// 选择中的数据替换到datagridview里面相应的列
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void purchae_mouseleave(object sender, EventArgs e)
        {
           
            MultiSelect checkedcom = sender as MultiSelect;//选择的下拉
            dataGridView1.Rows[checkedcom.Rowindex].Cells[7].Value = checkedcom.GettextName;//替换内容
            dataGridView1.Controls.Remove(checkedcom);//删除下拉
            dataGridView1.Controls.Clear();//清除datagridview里面所有的控件
        }


   void enter_checkedbox(MultiSelect checkedbox)
        {
            checkedbox.Enter -= new EventHandler(purchae_mouseleave);
        }
 

 

自定义下拉控件.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Data;

namespace 综合采集.UI.Public
{

    public partial class MultiSelect : UserControl
    {

        #region 基础控件

        private TextBox tbSelectedValue;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值