关于datagridview里使用combox的总结

Posted 傻傻的幸福

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于datagridview里使用combox的总结相关的知识,希望对你有一定的参考价值。

最近写的程序中需要在DataGridView中使用下拉选择的功能,首选方案是列的ColumnType属性

使用EditingControlShowing事件,

 if (e.Control is ComboBox)
{
  int iColumn = dgvWorkerList.CurrentCell.ColumnIndex;
  switch (iColumn)
   {
     case 2://列
    {

      Gender.DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton;//原来设置的是Nothing

      List<string> list = new List<string>();
      list.Add("男");
      list.Add("女");

      Gender.DataSource = list;

      (e.Control as ComboBox).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);

    }

  }

}

 由原来的文本转为下拉框、绑定数据功能完全没有问题。唯一的问题是

黑色呀,尝试了强制刷新,无效,怀疑绑定数据问题,测试后觉得不是,因为直接在Items加内容,不使用绑定,结果一样。

郁闷很久,依然没有解决。

 

改方式吧,借鉴了

gldamao 的BLOG

巧用ComboBox控件实现datagridView下拉菜单功能

方法,小修改,实现效果。感谢gldamao。

放一个combox在窗体,Load中

this.cmbGender.Visible = false;
this.cmbGender.Width = 0;
this.dgvWorkerList.Controls.Add(this.cmbGender);

使用CurrentCellChanged事件中判断

private void dgvWorkerList_CurrentCellChanged(object sender, EventArgs e)
{
  try
  {
    int iIndex = this.dgvWorkerList.CurrentCell.ColumnIndex;

    switch (iIndex)
    {
      case 2:
      {
        this.cmbGender.Visible = false;
        this.cmbGender.Width = 0;
        this.cmbGender.Left = this.dgvWorkerList.GetCellDisplayRectangle(this.dgvWorkerList.CurrentCell.ColumnIndex,         this.dgvWorkerList.CurrentCell.RowIndex, true).Left;
        this.cmbGender.Top = this.dgvWorkerList.GetCellDisplayRectangle(this.dgvWorkerList.CurrentCell.ColumnIndex,         this.dgvWorkerList.CurrentCell.RowIndex, true).Top;
        this.cmbGender.Width = this.dgvWorkerList.GetCellDisplayRectangle(this.dgvWorkerList.CurrentCell.ColumnIndex,         this.dgvWorkerList.CurrentCell.RowIndex, true).Width;
        string content = Convert.ToString(this.dgvWorkerList.CurrentCell.Value);
        this.cmbGender.Text = content;
        this.cmbGender.Visible = true;

        List<string> list = new List<string>();
        list.Add("男");
        list.Add("女");

        this.cmbGender.DataSource = list;
      }
      break;

    }

  }

}

选列时出现combox添加内容

这里说下,之前用的绑定的方式加入内容,在选择时候发现无法获得选中的内容于是修改

for (int i = 0; i < list.Count; i++)
{
  this.cmbGender.Items.Add(“男”);
}

 之后

private void cmbGender_SelectionChangeCommitted(object sender, EventArgs e)
{
  this.dgvWorkerList.CurrentCell.Value = ((System.Windows.Forms.ComboBox)sender).SelectedItem.ToString();
  this.cmbGender.Visible = false;//这里稍作修改,选中内容后直接隐藏了combox 
  this.cmbGender.Width = 0;
}

 

效果很好。

 

只是原来的下拉黑色的问题没有解决,欢迎有办法的大神留言、指教。

以上是关于关于datagridview里使用combox的总结的主要内容,如果未能解决你的问题,请参考以下文章

winform解决datagridview里放combox,combox不能按下键快速选择的问题

Combox下拉绑定DataGridView

C# 控制datagridview的combox属性的列绑定数据

winform 窗体退出前判断表单是不是修改过,窗体上的控件有很多个,TextBox,combox,datagridview

winfrom datagridview如何给所有行的DataGridViewComboBoxCell都添加内容

如何使用 SQL 数据库计算 DataGridView 中每一行的总金额