[netMarketing类库] 自定义组件dataGridViewEx 扩展功能dataGridView

名空间:UserUI

功能:自定义组件,dataGridViewEx


功能详细说明:

dataGridViewEx是一个扩展功能的dataGridView,它实现的更丰富的表头控制,并且带有报表输出功能。

下图是它的效果的一个演示例子截图。

后面会给出一个简单的使用例子。

image.png



dataGridViewHelper类是一个方便操作dataGridView控件(包括dataGridViewEx控件)的类。

下面是演示代码:

using sharClass;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using UserUI.industrialControl;

namespace dataGridViewExTest
{

    public partial class Form1 : Form
    {
        public const string workDataFieldNames = "产品条码,电压值,结果,记录时间";
        public const string workDataFieldDataType = "string,double,string,string";
        dataGridViewHelper dgvHlper = null;
        public Form1()
        {
            InitializeComponent();
            dgvHlper = new dataGridViewHelper(this.songsDataGridView);
            dgvHlper.DataUpLimit = 12;
            dgvHlper.DataDnLimit =8;
        }


        private void addOneRowData(dataGridViewEx grid, List<object> obj)
        {
            if (grid.InvokeRequired)
            {
                Action<dataGridViewEx, List<object>> act = addOneRowData;
                grid.Invoke(act, new object[] { grid, obj });
            }
            else
            {
                try
                {
                    var set = dgvHlper.DgvSet;
                    set.appendRowData(dgvHlper.DgvDataTableName, obj);
                    this.songsDataGridView.Update();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }
        }

        private void initView(dataGridViewEx dview, string f, string arg1, string arg2)
        {
            if (dview.InvokeRequired)
            {
                Action<dataGridViewEx, string, string, string> act = initView;
                dview.Invoke(act, new object[] { dview, f, arg1, arg2 });
            }
            else
            {
                dgvHlper.Init(f, arg1, arg2);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            initView(this.songsDataGridView, "",  workDataFieldDataType, workDataFieldNames);
          
        }

        private void button1_Click(object sender, EventArgs e)
        {

            //产品条码,电压值,结果,记录时间
            var listdata = new List<Object>();
            listdata.Add(randomHelper.GenerateRndNumLetter(12));
            listdata.Add(randomHelper.GetRandomInt(1, 21) * 1.0);
            listdata.Add("OK");
            listdata.Add(DateTime.Now.ToString());
            addOneRowData(this.songsDataGridView, listdata);
        }
    }
}


image.png


关于dataGridViewHelper类勇哥简单说几点:


(1) 创建DataGridView控件的内容

        public const string workDataFieldNames = "点名字,X(mm),Y(mm),Z(mm),U(mm),注释";
        public const string workDataFieldDataType = "string,double,double,double,double,string";
        dataGridViewHelper dgvHelper = null;
        public Form1()
        {
            InitializeComponent();
            try
            {
                motion = new motionControl();
                dgvHelper = new dataGridViewHelper(this.dgvPtlist);
                dgvHelper.DataUpLimit = 112;
                dgvHelper.DataDnLimit = -1;
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            motion.Load();
          
            propertyGrid1.SelectedObject = null;
            propertyGrid1.SelectedObject = motion;
            initView(this.dgvPtlist, "", workDataFieldDataType, workDataFieldNames);
            updateUIPtList();
        }


(2) 添加行数据

非常重要的一点是,你添加到List<object>中的数量要对,而且数据类型必须要与定义的时候要一样!

下图中的m.x, m.y, m.z, m.u之所以要转为double,是因为初建的时候定义的就是double。

 public const string workDataFieldDataType = "string,double,double,double,double,string";

这一点如果错了,appendRowData就会失败!


另外,dgvHelper.DgvSet是个dataSetHelper类的对象,所有的添加删除查询数据都由它来完成。

这个类的使用请参考:

[netMarketing类库] dataSetHelper类:数据集辅助类,用于操作内存数据表》 


image.png


(3)下面演示了遍历整DataGridView控件上面的数据。

其实用的就是DatasetHelper类的RowsForEach方法。


 var s1 = dgvHelper.DgvSet.getRow(dgvHelper.DgvDataTableName, 0);
                rtbmsg.AppendText(string.Format("{0},{1},{2},{3},{4},{5}\r\n", s1[0], s1[1], s1[2], s1[3], s1[4], s1[5]));
                var resList = new List<ptListStruct>();
                var sb1 = new StringBuilder();
                dgvHelper.DgvSet.RowsForEach(dgvHelper.DgvDataTableName, s =>
                {Row
                    sb1.Clear(); sb1.Append(dgvHelper.DgvDataTableName + ",");
                    var tmp =
                        new ptListStruct()
                        {
                            ptName = s.ItemArray[0].ToString(),
                            x = s.ItemArray[1].ToString(),
                            y = s.ItemArray[2].ToString(),
                            z = s.ItemArray[3].ToString(),
                            u = s.ItemArray[4].ToString(),
                            explain = s.ItemArray[5].ToString()
                        };
                   
                    resList.Add(tmp);
                    return 0;
                });
                motion.updatePtList(resList);



--------------------- 

作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

返回类库功能说明目录


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864