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;