• DataGridView的单元格如何嵌入多个按钮控件


      前段时间我有一个朋友面试公司的时候遇到这个面试题,他也给了份原题给我瞧瞧,并没有什么特别的要点,关于这一类问题,如何在网格上的单元格嵌入多个控件(如按钮、超链接等)问题,我在网上搜索了下这类问题,发现很多解答但是都杂乱,本篇文章帮助大家了解如何应对这类问题。

      微软提供的DataGirdView网格控件可通过GetCellDisplayRectangle()方法将需要的控件嵌入单元格中,如:

    this.Load += Form1_Load;

    void Form1_Load(object sender, EventArgs e)
    {
      MulAutoBtnEdit();
    }

    private void MulAutoBtnEdit()
    {
      this.dataGridView1.Columns.Add("ColBtnEdit", "嵌入操作按钮");
      this.dataGridView1.Columns["ColBtnEdit"].Width = 150;
      int index = this.dataGridView1.Columns["ColBtnEdit"].Index;
      this.dataGridView1.Columns["ColBtnEdit"].Resizable = DataGridViewTriState.False;
      Button btnAdd = GetBtnByType("BtnAdd","新增");
      Button btnEdit = GetBtnByType("BtnEdit", "修改");
      Button btnDel = GetBtnByType("BtnDel", "删除");
      this.dataGridView1.Controls.Add(btnAdd);
      this.dataGridView1.Controls.Add(btnEdit);
      this.dataGridView1.Controls.Add(btnDel);
      Rectangle rectangle = this.dataGridView1.GetCellDisplayRectangle(index, 0, true);//获取当前单元格上的矩形区域
      btnAdd.Size = btnEdit.Size = btnDel.Size = new Size(rectangle.Width / 3 + 1, rectangle.Height);
      btnAdd.Location = new Point(rectangle.Left, rectangle.Top);
      btnEdit.Location = new Point(rectangle.Left + btnAdd.Width, rectangle.Top);
      btnDel.Location = new Point(rectangle.Left + btnAdd.Width + btnDel.Width, rectangle.Top);
    }

    private Button GetBtnByType(string strBtnName,string strBtnText)
    {
      Button btn = new Button();
      btn.Name = strBtnName;
      btn.Text = strBtnText;
      btn.Click += btn_Click;
      return btn;
    }

    private void btn_Click(object sender, EventArgs e)
    {
      if(sender is Button)
      {
        Button btn = (Button)sender;
        MessageBox.Show(string.Format("点击按钮:{0}",btn.Text));
      }
    }

      效果图:

      通过以上的操作即可将多个按钮嵌入到单元格中,不考虑维护性、效率问题,只在于给予大家思路,对于“超链接”控件等都可用类似的方法处理,类似网址如下:

      https://bbs.csdn.net/topics/340208660

      在网上发行另一种方式,思路差不多,地址我也贴出来:

      https://blog.csdn.net/linzi1015910507/article/details/52595863

      关于第三方DevExpress组件上的网格如GridView等,本人并没有找到好的解决上面问题的方法,有不足之处,知情人事可在留言板上赐教。

      A young idler ~ an old beggar !

  • 相关阅读:
    QTP模拟鼠标和键盘事件整理
    Linux 入门常用命令 — 改变文件或目录的访问权限
    做一个有品质的男人
    Linux下.tar .gz .tgz .bz2 .bz等解、压包命令详解
    全面整理CentOS系统使用中文
    MSDN宝藏库中,初学者应该看的东西【整理的很辛苦哦】
    IIS 7.5版本中一些诡异问题的解决方案
    老生常谈ASP.NET中的Cookies,罗列读写Cookies的方法
    分享3段平时很实用的微代码,高手莫喷
    SQL 2005中的临时表
  • 原文地址:https://www.cnblogs.com/YangJianhui/p/9157394.html
Copyright © 2020-2023  润新知