c# datagridview 分组分组功能怎么实现

C#实现DataGridView控件行列互换的方法
C#实现DataGridView控件行列互换的方法
本文实例讲述了C#实现DataGridView控件行列互换的方法。分享给大家供大家参考。具体如下:
该示例程序是一个Windows窗体应用程序,有左右两个DataGridView控件:dgvLeft和dgvRight
dgvRight除时间外的每一行是dgvLeft的一列
private void Form1_Load(object sender, EventArgs e)
//C#中确定控件DataGridView根据内容自动调整列宽长度的属性
//是AutoSizeColumnsMode,将它的值设置为AllCells时可以达到该效果。
//调整行每行头部的宽度(可以更好地显示出数字)
this.dgvLeft.RowHeadersWidth = 50;
this.dgvRight.RowHeadersWidth = 50;
//左侧数据表
DataTable dtLeft = new DataTable();
dtLeft.Columns.Add("C1");
dtLeft.Columns.Add("C2");
dtLeft.Columns.Add("C3");
dtLeft.Columns.Add("TIME");
dtLeft.Rows.Add("1-1", "1-2", "1-3", DateTime.Now.ToShortTimeString());
dtLeft.Rows.Add("2-1", "2-2", "2-3", DateTime.Now.ToShortTimeString());
dtLeft.Rows.Add("3-1", "3-2", "3-3", DateTime.Now.ToShortTimeString());
dtLeft.Rows.Add("4-1", "4-2", "4-3", DateTime.Now.ToShortTimeString());
dtLeft.Rows.Add("5-1", "5-2", "5-3", DateTime.Now.ToShortTimeString());
dtLeft.Rows.Add("6-1", "6-2", "6-3", DateTime.Now.ToShortTimeString());
dgvLeft.DataSource = dtL
//右侧数据表,是左侧数据表的转置
DataTable dtRight = new DataTable();
for (int i = 0; i & dtLeft.Rows.C i++)
dtRight.Columns.Add("C" + i);
dtRight.Columns.Add("TIME");
for (int i = 0; i & dtLeft.Columns.Count - 1; i++)
object[] obj = new object[dtLeft.Rows.Count + 1];
for (int j = 0; j & dtLeft.Rows.C j++)
obj[j] = dtLeft.Rows[j][i];
obj[obj.Length - 1] = DateTime.Now.ToShortTimeString();
dtRight.Rows.Add(obj);
dgvRight.DataSource = dtR
每一行的行号可以通过下面的方法添加
//DataGridView 控件 dgvLeft 的 RowsAdded 事件
private void dgvLeft_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
for (int i = 0; i & dgvLeft.Rows.C i++)
this.dgvLeft.Rows[i].HeaderCell.Style.Alignment =
DataGridViewContentAlignment.MiddleR
this.dgvLeft.Rows[i].HeaderCell.Value = i.ToString();
//DataGridView 控件 dgvLeft 的 RowsRemoved 事件
private void dgvLeft_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
for (int i = 0; i & dgvLeft.Rows.C i++)
this.dgvLeft.Rows[i].HeaderCell.Style.Alignment =
DataGridViewContentAlignment.MiddleR
this.dgvLeft.Rows[i].HeaderCell.Value = i.ToString();
//DataGridView 控件 dgvRight 的 RowsAdded 事件
private void dgvRight_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
for (int i = 0; i & dgvRight.Rows.C i++)
this.dgvRight.Rows[i].HeaderCell.Style.Alignment =
DataGridViewContentAlignment.MiddleR
this.dgvRight.Rows[i].HeaderCell.Value = i.ToString();
//DataGridView 控件 dgvRight 的 RowsRemoved 事件
private void dgvRight_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
for (int i = 0; i & dgvRight.Rows.C i++)
this.dgvRight.Rows[i].HeaderCell.Style.Alignment =
DataGridViewContentAlignment.MiddleR
this.dgvRight.Rows[i].HeaderCell.Value = i.ToString();
运行效果如下图所示:
希望本文所述对大家的C#程序设计有所帮助。
Copyright & 2016 phpStudy15:36 提问
在C#中可以实现以下功能吗?具体代码怎么实现,需要添加什么引用吗?
在datagridview中显示出数据表后,1)选中某一行,再按“删除选中”按钮删除的代码怎么写? 2)双击表中的某一行,可以弹出该条记录的详细。如下图选中其中某行,显示下面界面
按赞数排序
是出现已经保存过的监察表
貌似不难、不过我是学HTML的
1、删除按钮先判断datagridview.CurrentRow.Index&=0,表示某行被选中,
通过datagridview.CurrentRow.Cells["现场监察编号"].Value.ToString();获取行key值,从数据源中删除此行,然后重新绑定datagridview
2、datagridview_CellDoubleClick事件为双击某行事件,通过ShowDialog()打开其他窗口,显示详细信息。
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐c# datagridview实现分页功能 - 简书
c# datagridview实现分页功能
datagridview是我们用于显示数据的一个很常用的工具,如果数据量大的话,分页显示是很有必要的,所以在这里分享一下分页显示的功能实现步骤。
四个按钮(Button),三个标签(label)
公共部分声明几个变量和容器
public int pageSize = 10;
//每页记录数
public int recordCount = 0;
//总记录数
public int pageCount = 0;
public int currentPage = 0;
DataTable dtSource = new DataTable();
加载数据的方法
///LoadPage方法
/// &summary&
/// loaddpage方法
/// &/summary&
private void LoadPage()
if (currentPage & 1) currentPage = 1;
if (currentPage & pageCount) currentPage = pageC
int beginR
DataTable dtT
dtTemp = dtSource.Clone();
beginRecord = pageSize * (currentPage - 1);
if (currentPage == 1) beginRecord = 0;
endRecord = pageSize * currentP
if (currentPage == pageCount) endRecord = recordC
for (int i = beginR i & endR i++)
dtTemp.ImportRow(dtSource.Rows[i]);
tf_dgv1.DataSource = dtT
//datagridview控件名是tf_dgv1
toolStripLabel1.Text = currentPage.ToString();//当前页
toolStripLabel4.Text = pageCount.ToString();//总页数
toolStripLabel6.Text = recordCount.ToString();//总记录数
分页的方法
/// &summary&
/// 分页的方法
/// &/summary&
/// &param name="str"&&/param&
private void fenye(string str)
//str是sql语句
SqlDataAdapter sda = new SqlDataAdapter(str, yb_db.yb_ConStr);
DataSet ds = new DataSet();
sda.Fill(ds);
dtSource = ds.Tables[0];
recordCount = dtSource.Rows.C
pageCount = (recordCount / pageSize);
if ((recordCount % pageSize) & 0)
pageCount++;
//默认第一页
currentPage = 1;
LoadPage();//调用加载数据的方法
在事件里调用
private void chaxun_Click(object sender, EventArgs e)
if (zyh_textbox.Text.Trim().Equals(string.Empty) || zyh_textbox.Text.Trim().Length &= 4)
MessageBox.Show("请输入正确的住院号!");
string str = "select * from test"; //这里是你的查询语句
fenye(str);//分页
LoadPage();//加载数据
翻页按钮的事件里这样写
点击第一页
currentPage = 1;
LoadPage();
点击最后一页
currentPage = pageC
LoadPage();
点击上一页
currentPage++;
LoadPage();
点击下一页
currentPage --;
LoadPage();
一个始终不能脱离低级趣味的人。
发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注
09:45字数 61697阅读 3316评论 2喜欢 85 用到的组件 1、通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FM...
用到的组件1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好...
用到的组件1、通过CocoaPods安装项目名称项目信息AFNetworking网络请求组件FMDB本地数据库组件SDWebImage多个缩略图缓存组件UICKeyChainStore存放用户账号密码组件Reachability监测网络状态DateTools友好化时间MBP...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
我喜欢的微信公号:蓝小姐和黄小姐,最近发布了一篇关于法国女人的文章--法国女人为何这么迷人,讨论法国女人的大杀器。 不得不承认,法国女人是全世界女人中的战斗机,她们的魅力已经被各种加v认证。随之而来,她们也被各种翻来覆去的研究个遍。她们的精致,她们的性感,她们的浪漫,她们的...
4 处 那个保安显然有些闪烁其词,在夏光看来没有几句是真的。 “你知道这是有包庇罪的嫌疑吗?我忍你很久了,再跟老子唧唧歪歪不老实小心我扣你回去!”夏光激起青筋,一把抓住那个四十来岁的保安,“十四号一整天的监控视频怎么会不见了?还有那个年轻的保安又到哪去了?你他妈一句不知道就...
在手机同质化严重的今天,似乎在创新上已经举步维艰,所有国产发布会的都像是苹果的新品发布会一样,可以说是让人非常失望。然而一说到魅族,我们就容易联想到打磨联发科,果然这次魅族Pro7也没让煤油们“失望”,还是继续打磨联发科,不过这次的PRO 7确也给我们带来了意料之外的惊喜,...
最近才发现这个地方,当了几天的游客,发现这里的风格简单、清爽、有味道, 遂决定在这安家,取名“沉默的金牛”,没想到已经被人注册了,于是多加个单字“乐”。 这是我的第一篇。
今天三个家伙在群里讨论国家政治,两拨人最后谁也不能相互说服,讨论完之后,大家都很失望,两拨人都对对方很失望,彻底改观了,估计大家都在重新审视对方。 最后的结论是在现阶段没得选的情况下,还是要努力赚钱,有钱了才有得选,我和段子杨统一认为这个学生成绩差,还不想着怎么学好,未来是...OutlookGrid:以Outlook样式分组和排列数据项(5) - C#教程 - 编程入门网
OutlookGrid:以Outlook样式分组和排列数据项(5)
缺少的和未经测试的功能
因为DataGridView基控件包含众多方法、事件和属性,它们完全被OutlookGrid继承,我没有努力用OutlookGrid的实现来测试它们全部。这意味着:一旦您开始为其它超出本文叙述的功能特性而使用OutlookGrid,您将很有可能遇到bug或功能缺失。因为我已遇到其中的一些(问题),我将在下面列出我所知道的问题:
很不幸,OutlookGrid不支持嵌套分组。这就是下一步要做的。
改变网格的显示风格可能导致分组不能被100%正确地绘出。
通常,Group(分组)的文本颜色被设置为黑色并且不能改变,您将需要改变OutlookGridRow类中的Paint()方法。
我没有用VirtualMode(虚模式)测试网格。(译注:VirtualMode属性在 .NET Framework 2.0 版中是新增的。虚拟模式是为使用大型数据存储区而设计的。当 VirtualMode 属性为 true 时,可以创建一个包含大量行和列的 DataGridView,然后处理 CellValueNeeded 事件来填充单元格。虚拟模式要求实现基础数据缓存,以便基于用户的操作来处理 DataGridView 单元格的填充、编辑和删除。详见MSDN。)说实话,我不知道那个概念是如何工作的,因此我怀疑:一旦您开启了VirtualMode(译注:即将其设置为true)数据项还能被正确显示。
绑定数据源不是直接绑定到DataGridView基控件。因此,数据绑定只为显示数据项工作。然而,一旦您编辑网格中的数据项,数据源将不会被更新。您将不得不自己动手实现更新。
这也意味着网格中的新数据项将不会自动被添加到数据源。这也将不得不用手工实现。
为Group的row重写了缺省行,不是所有普通行触发的事件分组的行都能触发。比如,分组行重写OnDoubleClick事件,以自动折叠或展开。不改变代码该行为是不能被触发的。
毫无疑问这里还有一些其它问题,请向我报告它们,那么我和其它开发者都将可以从中获益。也许,我会投入更多时间开发这个控件的更多功能。
设计和可扩展性
在这个部分,我要描述这个控件如何实现的更多细节,特别面向可能要在该控件上做一些编码的开发人员读者。我尝试用VS2005中某些东西弄成类似一个的UML图,但是好吧&这个图将必须做出来。
OutlookGrid博客分类:
  虽然在Visual Studio中
DataGridView控件的DataGridViewComboBoxColumn可以实现下拉列表框,但这样的列会在整列中都显示下拉列表框,不太
美观,而且还要用代码实现数据绑定。本文介绍一种只在当前编辑单元格中显示下拉列表框的方法,供大家参考。
  首先新建一个Windows应用程序,将主窗体重命名为MainForm,在MainForm中加入一个DataGridView控件,命名为dgv_User。如下图所示:
  打开窗体代码窗口,在代码窗口中声明一个ComboBox的控件
定义下拉列表框
ComboBox cmb_Temp
ComboBox();
  我们要绑定的下拉列表框的功能是选择性别,添加如下绑定性别下拉列表框的方法
绑定性别下拉列表框
&/summary&
DataTable dtSex
DataTable();
dtSex.Columns.Add(
dtSex.Columns.Add(
DataRow drS
dtSex.NewRow();
dtSex.Rows.Add(drSex);
dtSex.NewRow();
dtSex.Rows.Add(drSex);
cmb_Temp.ValueMember
cmb_Temp.DisplayMember
cmb_Temp.DataSource
cmb_Temp.DropDownStyle
ComboBoxStyle.DropDownL
  通常情况下我们都是从数据库中获取数据表(或者数据集),然后绑定到DataGridView中的,这里我们为了避免连接数据库,手中构造一个数据库表,代码如下:
BindData()
DataTable dtData
DataTable();
dtData.Columns.Add(
dtData.Columns.Add(
dtData.Columns.Add(
DataRow drD
dtData.NewRow();
dtData.Rows.Add(drData);
dtData.NewRow();
dtData.Rows.Add(drData);
dtData.NewRow();
dtData.Rows.Add(drData);
dtData.NewRow();
dtData.Rows.Add(drData);
dtData.NewRow();
dtData.Rows.Add(drData);
dtData.NewRow();
dtData.Rows.Add(drData);
.dgv_User.DataSource
  为窗体加载事件添加如下方法,其具体功能有详细说明:
MainForm_Load(
sender, EventArgs e)
绑定性别下拉列表框
BindSex();
绑定数据表
BindData();
设置下拉列表框不可见
cmb_Temp.Visible
添加下拉列表框事件
cmb_Temp.SelectedIndexChanged
EventHandler(cmb_Temp_SelectedIndexChanged);
将下拉列表框加入到DataGridView控件中
.dgv_User.Controls.Add(cmb_Temp);
  当用户选择的单元格移动到性别这一列时,我们要显示下拉列表框,添加如下事件
dgv_User_CurrentCellChanged(
sender, EventArgs e)
.dgv_User.CurrentCell.ColumnIndex
Rectangle rect
dgv_User.GetCellDisplayRectangle(dgv_User.CurrentCell.ColumnIndex, dgv_User.CurrentCell.RowIndex,
dgv_User.CurrentCell.Value.ToString();
cmb_Temp.Text
cmb_Temp.Text
cmb_Temp.Left
cmb_Temp.Top
cmb_Temp.Width
cmb_Temp.Height
cmb_Temp.Visible
cmb_Temp.Visible
  当用户选择下拉列表框时改变DataGridView单元格的内容
cmb_Temp_SelectedIndexChanged(
sender, EventArgs e)
(((ComboBox)sender).Text
dgv_User.CurrentCell.Value
dgv_User.CurrentCell.Tag
dgv_User.CurrentCell.Value
dgv_User.CurrentCell.Tag
  当滚动DataGridView或者改变DataGridView列宽时将下拉列表框设为不可见
dgv_User_Scroll(
sender, ScrollEventArgs e)
.cmb_Temp.Visible
dgv_User_ColumnWidthChanged(
sender, DataGridViewColumnEventArgs e)
.cmb_Temp.Visible
  绑定数据表后将性别列中的每一单元格的Value和Tag属性(Tag为值文本,Value为显示文本)
dgv_User_DataBindingComplete(
sender, DataGridViewBindingCompleteEventArgs e)
.dgv_User.Rows.C i
(dgv_User.Rows[i].Cells[
dgv_User.Rows[i].Cells[
].ColumnIndex
dgv_User.Rows[i].Cells[
dgv_User.Rows[i].Cells[
].Value.ToString();
(dgv_User.Rows[i].Cells[
].Value.ToString()
dgv_User.Rows[i].Cells[
(dgv_User.Rows[i].Cells[
].Value.ToString()
dgv_User.Rows[i].Cells[
  效果如下图所示:
  完整的代码如下:
System.Collections.G
System.ComponentM
System.Windows.F
MyNameSpace
MainForm : Form
定义下拉列表框
ComboBox cmb_Temp
ComboBox();
MainForm()
InitializeComponent();
绑定性别下拉列表框
&/summary&
DataTable dtSex
DataTable();
dtSex.Columns.Add(
dtSex.Columns.Add(
DataRow drS
dtSex.NewRow();
dtSex.Rows.Add(drSex);
dtSex.NewRow();
dtSex.Rows.Add(drSex);
cmb_Temp.ValueMember
cmb_Temp.DisplayMember
cmb_Temp.DataSource
cmb_Temp.DropDownStyle
ComboBoxStyle.DropDownL
为避免连接数据库,这里手工构造数据表,实际应用中应从数据库中获取
&/summary&
BindData()
DataTable dtData
DataTable();
dtData.Columns.Add(
dtData.Columns.Add(
dtData.Columns.Add(
DataRow drD
dtData.NewRow();
dtData.Rows.Add(drData);
dtData.NewRow();
"http://www.baidu.com
dtData.Rows.Add(drData);
dtData.NewRow();
dtData.Rows.Add(drData);
dtData.NewRow();
http://www.google.com
dtData.Rows.Add(drData);
dtData.NewRow();
dtData.Rows.Add(drData);
dtData.NewRow();
dtData.Rows.Add(drData);
.dgv_User.DataSource
MainForm_Load(
sender, EventArgs e)
绑定性别下拉列表框
BindSex();
绑定数据表
BindData();
设置下拉列表框不可见
cmb_Temp.Visible
添加下拉列表框事件
cmb_Temp.SelectedIndexChanged
EventHandler(cmb_Temp_SelectedIndexChanged);
将下拉列表框加入到DataGridView控件中
.dgv_User.Controls.Add(cmb_Temp);
当用户移动到性别这一列时单元格显示下拉列表框
dgv_User_CurrentCellChanged(
sender, EventArgs e)
.dgv_User.CurrentCell.ColumnIndex
Rectangle rect
dgv_User.GetCellDisplayRectangle(dgv_User.CurrentCell.ColumnIndex, dgv_User.CurrentCell.RowIndex,
dgv_User.CurrentCell.Value.ToString();
cmb_Temp.Text
cmb_Temp.Text
cmb_Temp.Left
cmb_Temp.Top
cmb_Temp.Width
cmb_Temp.Height
cmb_Temp.Visible
cmb_Temp.Visible
当用户选择下拉列表框时改变DataGridView单元格的内容
cmb_Temp_SelectedIndexChanged(
sender, EventArgs e)
(((ComboBox)sender).Text
dgv_User.CurrentCell.Value
dgv_User.CurrentCell.Tag
dgv_User.CurrentCell.Value
dgv_User.CurrentCell.Tag
滚动DataGridView时将下拉列表框设为不可见
dgv_User_Scroll(
sender, ScrollEventArgs e)
.cmb_Temp.Visible
改变DataGridView列宽时将下拉列表框设为不可见
dgv_User_ColumnWidthChanged(
sender, DataGridViewColumnEventArgs e)
.cmb_Temp.Visible
绑定数据表后将性别列中的每一单元格的Value和Tag属性(Tag为值文本,Value为显示文本)
dgv_User_DataBindingComplete(
sender, DataGridViewBindingCompleteEventArgs e)
.dgv_User.Rows.C i
(dgv_User.Rows[i].Cells[
dgv_User.Rows[i].Cells[
].ColumnIndex
dgv_User.Rows[i].Cells[
dgv_User.Rows[i].Cells[
].Value.ToString();
(dgv_User.Rows[i].Cells[
].Value.ToString()
dgv_User.Rows[i].Cells[
(dgv_User.Rows[i].Cells[
].Value.ToString()
dgv_User.Rows[i].Cells[
  文章很长,希望能给您带来帮助。
浏览: 427214 次
来自: 北京
在ie6下报了个stack overflow at line
好像少了一句代码吧? FloatingFunc.show(th ...
连接有问题!
唉,楼主你都没有搞清楚重量级和轻量级。。。。既然引用了SWT, ...
我晕啊,你链接的什么内容额,我要的iis,你链接个视频什么意思 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 datagridview 分组 的文章

 

随机推荐