Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WinForm 为 DataGridViewCell 绑定 DataGridView

WinForm 为 DataGridViewCell 绑定 DataGridView

作者头像
Venyo
发布于 2018-03-15 05:20:42
发布于 2018-03-15 05:20:42
1.1K00
代码可运行
举报
文章被收录于专栏:Venyo 的专栏Venyo 的专栏
运行总次数:0
代码可运行

先上效果图。

对外提供一个 public 的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 正常 Type1 是 JSON 的数据集或者 BSON 的数据集
public void FillDataGridView(Type1 data, DataGridView gridView){
    // 为 gridView 添加字段
    ...
    
    // 为 gridView 添加数据
    foreach(Type2 d in data){
        if(d 是复杂的数据类型){
            // 创建子 DataGridview
            // 属性根据自己的需要设定
            DataGridView view = new DataGridView();
            view.AllowUserToAddRows = false;
            view.AllowUserToDeleteRows = false;
            view.AllowUserToOrderColumns = false;
            view.BackgroundColor = System.Drawing.Color.White;
            view.ReadOnly = true;
            view.Visible = false;
            
            // 此处递归调用,使得数据中所有的复杂数据类型都能用 DataGridview 单独显示出来
            FillDataGridView(d as Type1, view);// 或者 FillDataGridView(new Type1(d), view);
            
            // 设置当前的 cell
            DataGridViewCell cell = ...;
            // 设置子 DataGridview 的位置
            view.Parent = gridView;
            // 以下这种方法,需要单元格都是等长等宽才能有好的效果
            view.Left = gridView.Left + gridView.RowHeadersWidth + gridView.Columns[0].Width * cell.ColumnIndex;
            view.Top = gridView.Top + gridView.ColumnHeadersHeight + gridView.Rows[0].Height * cell.RowIndex;
            
            // 为当前的 DataGridview 以及子 DataGridview 设置响应事件
            // 以至于达到我们想要的效果:点击 cell 用另外一个 DataGridview 显示出该 cell 中的数据
            // 接下来有两个响应方法,在这个方法的后面,往下翻就有了
            gridView.CellClick += GridViewCellClick;
            view.CellClick += GridViewCellClick;
            view.Leave += GridViewLeave;
            
            // 最后将 cell 和子 DataGridview 绑定起来
            cell.Tag = view;
            cell.value = "点击查看";
        }
        else{
            // 向 cell 中填入数据
            ...
        }
    }
}



private void GridViewCellClick(object sender, DataGridViewCellEventArgs e)
{
    DataGridViewCell cell = (sender as DataGridView).CurrentCell;
    if (cell.Tag != null && cell.Tag is DataGridView)
    {
        DataGridView view = (cell.Tag as DataGridView);
        view.Visible = true;
        // 此处让 view 获得焦点时为了给 GridViewLeave 提供方便
        // 如果此处不加 Focus 的话,就需要先点击 view 然后点击其他控件来让 view 失去焦点
        // 此时 view 才会消失,可是这样子的体验非常差
        view.Focus();
    }
}



private void GridViewLeave(object sender, EventArgs e)
{
    (sender as DataGridView).Visible = false;
}

OK.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
DataGridView控件用法一:数据绑定
用DataGridView控件,可以显示和编辑来自多种不同类型的数据源的表格数据。
zls365
2020/12/15
4.2K0
【转】基于C#的WinForm中DataGridView控件操作汇总
Console.WriteLine(DataGridView1.CurrentCell.Value);
静谧的小码农
2019/06/16
5.6K0
C#实例:datagridview单元格合并
这是替C#微信交流群群友做的一个小实例,目的就是在datagridview选择对应行以后,点击button后获取对应行的ip,并执行相应的操作,其实我觉得这样的话button没必要非放置到datagridview里面的!但是为了满足群友的需求,还是这么做了。
zls365
2020/08/19
5.2K0
C#实例:datagridview单元格合并
C#——dataGridView控件获取当前鼠标所在的行
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { //获取行列坐标索引 //方法一: //int row = e.RowIndex+1; //int col = e.ColumnIndex+1; //方法二: //int row =
vv彭
2021/03/07
2.4K0
DataGridView使用小结
1).右键点击行时选中行,并弹出操作菜单 1). 添加一个快捷菜单contextMenuStrip1; 2). 给dataGridView1的CellMouseDown事件添加处理程序: private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)         {             if (e.Button == MouseButtons.Right)             {
跟着阿笨一起玩NET
2018/09/18
2.4K0
WinForm使用DataGridView实现类似Excel表格的查找替换
在桌面程序开发过程中我们常常使用DataGridView作为数据展示的表格,在表格中我们可能要对数据进行查找或者替换。 其实要实现这个查找替换的功能并不难,记录下实现过程,不一定是最好的方式,但它有用! 先看demo下效果
SpringSun
2021/07/23
1.9K0
【愚公系列】2023年11月 Winform控件专题 DataGridView控件详解
Winform控件是Windows Forms中的用户界面元素,它们可以用于创建Windows应用程序的各种视觉和交互组件,例如按钮、标签、文本框、下拉列表框、复选框、单选框、进度条等。开发人员可以使用Winform控件来构建用户界面并响应用户的操作行为,从而创建功能强大的桌面应用程序。
愚公搬代码
2023/11/30
2.7K0
(三十二)c#Winform自定义控件-表格
GitHub:https://github.com/kwwwvagaa/NetWinformControl
冰封一夏
2019/09/11
2.2K0
(三十二)c#Winform自定义控件-表格
DataGridView的DataGridViewComboBoxColumn列点击一次,自动处于编辑状态
本文转载:http://www.cnblogs.com/Johnny_Z/archive/2012/02/12/2348235.html
跟着阿笨一起玩NET
2018/09/19
3K0
【C#】让DataGridView输入中实时更新数据源中的计算列
本文适用Winform开发,且DataGridView的数据源为DataTable/DataView的情况。
AhDung
2018/09/13
5.7K0
【C#】让DataGridView输入中实时更新数据源中的计算列
使用DataGridView进行增删改查,并同步到数据库
DataGridView控件具有极高的可配置性和可扩展性。它提供有大量的属性、方法和事件,能够用来对该控件的外观和行为进行自己定义。以下通过一个小样例来展示DataGridView进行增删改查,并同步到数据库的功能。
全栈程序员站长
2022/07/09
4.5K0
使用DataGridView进行增删改查,并同步到数据库
在DataGridView控件中加入ComboBox下拉列表框的实现
本文转载:http://www.cnblogs.com/luqingfei/archive/2007/03/28/691372.html
跟着阿笨一起玩NET
2018/09/18
4.2K0
在DataGridView控件中加入ComboBox下拉列表框的实现
Excel催化剂开源第13波-VSTO开发之DataGridView控件几个小坑
Excel催化剂内部大量使用了DataGridView,这其中有一些小坑,花了力气才解决的,在此给广大开发者作简单分享。
Excel催化剂
2021/08/19
1.3K0
DataGridViewCheckBoxColumn的勾选框勾上了,Value却是false
本文转载http://www.cnblogs.com/gossip/archive/2008/12/02/1346047.htmldatagridview的checkbox列,当修改checkbox状态时实时获得其状态值
跟着阿笨一起玩NET
2018/09/18
2.3K0
WinForm 控件 DataGridView 常用操作
在窗体load事件里面设置表格dataGridView的AutoGenerateColumns为 false
SpringSun
2021/10/18
2K0
WinForm程序虚拟分页(实时加载数据)
通过访问数据库的分页存储过程获取某一页的数据 由于这个类的代码并非我写的,所以这里不在公布了 此类公开的几个字段和一个方法如下
liulun
2022/05/09
1.1K0
C#实现WinForm DataGridView控件支持叠加数据绑定
我们都知道WinForm DataGridView控件支持数据绑定,使用方法很简单,只需将DataSource属性指定到相应的数据源即可,但需注意数据源必须支持IListSource类型,这里说的是支持,而不是实现,是因为他既可以是实现了IListSource的类型,也可以是实现了IList的类型,例如:List类型,DataTable类型等,这里就不一一列举了,今天我主要实现的功能如标题所描述的:实现WinForm DataGridView控件支持叠加数据绑定,或者说是附加数据功能,什么意思呢?说白了就是支持数据的多次绑定,标准的绑定方法只支持单一绑定,即每次绑定均会清除原来的数据,而叠加数据绑定则可实现每次绑定均以附加的形式(原数据保留)添加到DataGridView控件中,这样就实现了分页加载,但可完整显示已加载的所有数据,这种应用场景在C/S端很常见,B/S端上也有(例如QQ空间动态下面的加载更多按钮)
全栈程序员站长
2022/07/05
2.1K0
一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-演示ORM对象与DataGridView的绑定技术-商品字典的另一个实现
回顾与说明     前面我们把“商品字典”、“商品入库”、“商品库存查询”、“商品入库查询”四个模块已经概括或者详细的演示了一个管理信息系统的典型应用场景,按照原来的打算,WinForm篇的例子系统中的几个模块就告一段落了。     由于好多朋友都问我,你的例子中大量使用ListView控件,很想知道是否可以支持DataGridView控件,所以我就有想到重新用DataGridView写一下“商品字典”模块。 本文内容     关于“商品字典”的实现及其业务应用场景请参见一步一步教你使用AgileEAS.N
魏琼东
2018/01/12
1.2K0
一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-演示ORM对象与DataGridView的绑定技术-商品字典的另一个实现
C# 鼠标悬停在datagridview的某单元格,显示悬浮框效果
本文转载:http://www.cnblogs.com/bribe/archive/2013/10/08/3357345.html
跟着阿笨一起玩NET
2018/09/19
2K0
C# 鼠标悬停在datagridview的某单元格,显示悬浮框效果
简单的winform学生管理系统Demo
明志德道
2023/10/21
2990
简单的winform学生管理系统Demo
推荐阅读
相关推荐
DataGridView控件用法一:数据绑定
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验