zoukankan      html  css  js  c++  java
  • 关于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;
    }

    效果很好。

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

  • 相关阅读:
    画架构图
    做产品的方方面面
    Tomcat一个有意思的漏洞
    LinkedHashMap 作为一个 CacheMap
    Maven提高篇系列之五——处理依赖冲突
    javaweb获取项目路径的方法
    curl工具介绍和常用命令
    Spring事务管理(详解+实例)
    如何更好地使用Java 8的Optional
    input的type=file触发的相关事件
  • 原文地址:https://www.cnblogs.com/SuperLady/p/6073091.html
Copyright © 2011-2022 走看看