zoukankan      html  css  js  c++  java
  • 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 !

  • 相关阅读:
    windows下安装部署RocketMQ
    Windows安装RabbitMQ
    HttpClient工具类
    Docker部署Spring Boot项目
    在Docker中安装Redis以及主从环境搭建
    df命令得到一个诡异的现象
    一个“稍后再读”的软件 POCKET
    也是关于 Stay Hungry. Stay Foolish.
    改用thebrain做思维导图
    文件系统只读,一个没有解决的问题(续)
  • 原文地址:https://www.cnblogs.com/YangJianhui/p/9157394.html
Copyright © 2011-2022 走看看