本文目录
- Windows 窗体 DataGridView 控件和 DataGrid 控件之间的区别
- C# 关于DataGridView控件的问题,这样遍历行不行
- 如何使用C#中的DataGridView控件
- C#winform如何在datagridview中添加控件
- DataGridView控件怎么实现分页功能
- C#中DataGridView控件的显示与隐藏
- C# DataGridView控件
- datagridview什么意思,怎么用
- 怎么在VB中添加datagridview控件
- datagridview怎样添加单选控件
Windows 窗体 DataGridView 控件和 DataGrid 控件之间的区别
DataGridView控件NET3.0为我们提供了DataGridView控件使我们可以显示表格数据,相比.NET2.0之前的DataGrid控件,DataGridView控件提供了更强大更灵活的以表格形式显示数据的功能。DataGrid控件,最早见于VisualStudio6.0。DataGrid控件的每一个单元格都可以包含文本值,但不能链接或内嵌对象。可以在代码中指定当前单元格,或者用户可以使用鼠标或箭头键在运行时改变它。通过在单元格中键入或编程的方式,单元格可以交互地编辑。单元格能够被单独地选定或按照行来选定。
C# 关于DataGridView控件的问题,这样遍历行不行
可以。Dgv.Rows\SelectedRows\SelectedCells都实现了枚举类接口,所以可以用for()foreach()来进行遍历。
如何使用C#中的DataGridView控件
DataGridView控件的使用 新的 DataGridView 是 .NET 2.0 中的一个新控件,是针对 .NET 1.x 中功能较差的标准 DataGrid 控件而设计的。Matthew MacDonald 在本文中论述了许多改进,包括:DataGridView 支持大量自定义和细致的格式设置、灵活的大小调整和选择、更好的性能以及更丰富的事件模型。.NET Framework 的前两个版本(.NET 1.0 和 .NET 1.1)在数据绑定方面留下了明显的空白。尽管开发人员拥有一个灵活的可配置模型,可以将几乎所有的控件链接到几乎所有的数据源,但却没有一种有效的方法来显示完整的信息表。可以实现此目的的唯一工具就是 DataGrid 控件,这种控件非常适合于处理简单的演示,但是不太适合实际代码。填补这项空白是 .NET 2.0 的主要目标之一,并且 Microsoft 已经用全新的网格控件 DataGridView 来实现此目标。DataGridView 有两个指导原则。首先,其目标是支持常见任务(如主控/详细列表、验证和数据格式设置),而不需要您编写许多代码。更重要的是,设计过程中始终考虑了扩展性,因此您可以集成所需的专用功能,而不必采用低级别的复杂编程。本页内容基本数据绑定美化 DataGridView使用 DataGridView 选择单元格DataGridView 对象DataGridView 样式自定义单元格格式按钮列图像列编辑 DataGridView处理错误验证输入使用列表列约束选择小结基本数据绑定熟悉 DataGridView 的最佳方法就是实际尝试一下,无需配置任何属性。就像 DataGrid 一样,您可以使用 DataSource 属性来绑定 DataTable 对象(或从 DataTable 派生的对象)。Dim ds As DataSet = GetDataSet()DataGridView1.DataSource = ds.Tables(Customers)与 DataGrid 不同的是,DataGridView 一次只能显示一个表。如果绑定整个 DataSet,则不会显示任何数据,除非您使用要显示的表名设置了 DataMember 属性。DataGridView1.DataSource = dsDataGridView1.DataMember = Customers基本的 DataGridView 显示遵循以下几项简单的规则:? 为数据源中的每个字段创建一列。 使用字段名称创建列标题。列标题是固定的,这意味着用户在列表中向下移动时列标题不会滚动出视图。 支持 Windows XP 视觉样式。您会注意到列标题具有新式的平面外观,并且当用户将鼠标移到其上时会突出显示。DataGridView 还包括几个您可能不会立即注意到的默认行为:? 允许就地编辑。用户可以在单元格中双击或按 F2 来修改当前值。唯一的例外是将 DataColumn.ReadOnly 设置为 True 的字段(如当前示例中的 OrderID 字段)。 支持自动排序。用户可以在列标题中单击一次或两次,基于该字段中的值按升序或降序对值进行排序。默认情况下,排序时会考虑数据类型并按字母或数字顺序进行排序。字母顺序区分大小写。 允许不同类型的选择。用户可以通过单击并拖动来突出显示一个单元格、多个单元格或多个行。单击 DataGridView 左上角的方块可以选择整个表。 支持自动调整大小功能。用户可以在标题之间的列分隔符上双击,使左边的列自动按照单元格的内容展开或收缩。返回页首美化 DataGridViewDataGridView 的默认外观仅仅比 DataGrid 略有改进,但是使用几项快速调整功能,您可以将其显著改进。其中的一个问题就是列无法自动展开以适合其包含的数据。您可以使用 DataGridView.AutoSizeColumns() 方法以及 DataGridViewAutoSizeColumnCriteria 枚举中的某个值来解决此问题。您可以选择根据标题文本、当前显示的行或表中的所有行的的宽度来调整列宽。’ 根据标题或此列的某一行中’ 最长一段文本的宽度调整’ 列宽。DataGridView1.AutoSizeColumns( _DataGridViewAutoSizeColumnCriteria.HeaderAndRows)请记住,此方法必须在绑定数据后调用,否则不会产生任何效果。你可能还需要在用户编辑数据后使用它(可能在响应 DataGridView.CellValueChanged 等事件时)。如果不增加列宽,则可以更改行高。默认情况下,列中的文本会跨越多行。如果您使用 DataGridView.AutoSizeRows() 方法,则行会根据其中的内容调整高度。使用此方法前,您可能希望增加列宽,尤其是在字段包含大量文本时。例如,以下代码片段使“说明”列的列宽增加为原列宽的四倍,然后调整行高以容纳其内容。DataGridView.Columns(Description).Width *= 4
C#winform如何在datagridview中添加控件
datagridview每添加一列的时候,可以选这个列的类型,有textbox,有button,有linklabel等,有个属性,叫什么Columntype
DataGridView控件怎么实现分页功能
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace 数据库分页功能{public partial class Form1 : Form{public Form1(){InitializeComponent();}int i, start;//i为总行数,start为起始位置int size = 4;//定义一个每页显示的行数string str = @“Data Source=当前计算机名;Initial Catalog=ptwinshopmanage;Integrated Security=True“;//连接字符串string str1 = “select * from [HouseMessage]“;//sql语句private void Form1_Load(object sender, EventArgs e){SqlConnection sqlcon = new SqlConnection(str);//连接数据库sqlcon.Open();//打开数据库SqlCommand sqlcmd = new SqlCommand(str1,sqlcon);//执行sql语句SqlDataAdapter sqlada = new SqlDataAdapter(sqlcmd);//数据适配器DataTable dt = new DataTable();//创建表sqlada.Fill(dt);//填充数据集i = dt.Rows.Count;//总的行数或者记录数show(0, size);//每页显示4条记录start = 0;//第一行sqlcon.Close();}//每页显示记录数j-i+1条public void show(int i, int j){SqlConnection sqlcon = new SqlConnection(str);sqlcon.Open();SqlCommand sqlcmd = new SqlCommand(str1, sqlcon);SqlDataAdapter sqlada = new SqlDataAdapter(sqlcmd);DataSet ds = new DataSet();sqlada.Fill(ds, i, j, “[HouseMessage]“);//把数据库表中的i-j的记录数用来填充数据集ListData.DataSource = ds.Tables[“[HouseMessage]“];//ListData为datagridview控件的name属性ds = null;//清空数据集}//首页private void button1_Click(object sender, EventArgs e){ListData.DataSource = null;//清空数据show(0,size);//调用show函数}//上一页private void button2_Click(object sender, EventArgs e){ListData.DataSource = null;start = start - 1;if (start 《 1){MessageBox.Show(“已是第一页“);show(0,size);}elseshow(start * size, size);}//下一页private void button3_Click(object sender, EventArgs e){ListData.DataSource = null;start = start + 1;show(start *size, size);}//尾页private void button4_Click(object sender, EventArgs e){ListData.DataSource = null;show(i - size, i);}}}
运行结果:
C#中DataGridView控件的显示与隐藏
您可以把这个DataGridView放在一个Form里,并将DataGridView的Dock属性设置成Fill。然后在父窗体里(那个按钮所在的窗体)初始化一个这个Form的对象,当单击那个按钮的时候可以调用这个Form对象的ShowDialog()方法(模态)或者Show()方法(非模态)来显示这个DataGridView。要关闭的话可以直接点这个Form右上角的X就行了。关于第二个问题,如果HopeWellPrintClass.mydataDataSet2()的返回是一个mydataDataSet2对象的话就可以不用new关键字,直接写1、this.mydataDataSet2=HopeWellPrintClass.mydataDataSet2();2、this.mydataTableAdapter=HopeWellPrintClass.mydataDataSet2TableAdapters.mydataTableAdapter();试试,看还有问题没有
C# DataGridView控件
声明一个全局变量用来保存当前行的索引,为datagridview控件添加CellContentClick事件,在事件处理方法中获取当前点击datagridview的行数并赋那个全局变量,这样在“修改”按钮的单击事件中就可以根据全局变量来获取当前需要修改的行数,就可以进行修改、删除了。 int index=0; private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { index = e.RowIndex; }
datagridview什么意思,怎么用
使用 DataGridView 控件,可以显示和编辑来自多种不同类型的数据源的表格数据。 将数据绑定到 DataGridView 控件非常简单和直观,在大多数情况下,只需设置 DataSource 属性即可。在绑定到包含多个列表或表的数据源时,只需将 DataMember 属性设置为指定要绑定的列表或表的字符串即可。 DataGridView 控件支持标准 Windows 窗体数据绑定模型,因此该控件将绑定到下表所述的类的实例: 任何实现 IList 接口的类,包括一维数组。任何实现 IListSource 接口的类,例如 DataTable 和 DataSet 类。任何实现 IBindingList 接口的类,例如 BindingList(Of T) 类。任何实现 IBindingListView 接口的类,例如 BindingSource 类。 DataGridView 控件支持对这些接口所返回对象的公共属性的数据绑定,如果在返回的对象上实现 ICustomTypeDescriptor 接口,则还支持对该接口所返回的属性集合的数据绑定。 通常绑定到 BindingSource 组件,并将 BindingSource 组件绑定到其他数据源或使用业务对象填充该组件。BindingSource 组件为首选数据源,因为该组件可以绑定到各种数据源,并可以自动解决许多数据绑定问题。有关更多信息,请参见 BindingSource 组件。
怎么在VB中添加datagridview控件
VB6里,类似的控件叫 datagrid控件,需要通过菜单 [工程] -- [部件],勾选Microdoft DataGrid Control 6.0 (SP6),完成添加到控件工具箱。VB利用DataGrid控件显示数据库中数据信息,DataGrid在数据库数据显示的时候非常重要,它在用户操作舒适度及数据排列方面有独到之处,对于Vb数据库编程的用户来说,掌握DataGrid的使用是至关重要的事情。 参考实例如下: Public cnn As adodb.Connection Public rst As adodb.Recordset Public Sub setdb() Set cnn = New adodb.Connection cnn.Provider = “Microsoft.Jet.OLEDB.4.O“ cnn.ConnectionString = “Data Source=“ & App.Path & “\personal.mdb;“ cnn.CursorLocation = adUseClient cnn.Open End Sub Private Sub Form_Load() On Error Resume Next Dim Strsql As String setdb Set DataGrid1.DataSource = Nothing Strsql = “select * from 备忘录 order by 编号“ Set rst = cnn.Execute(Strsql) If Err Then MsgBox “读取数据失败“ Exit Sub End If If rst.EOF Then Set DataGrid1.DataSource = Nothing Else Set DataGrid1.DataSource = rst End If End Sub
datagridview怎样添加单选控件
datagridview控件默认只支持datagridviewbuttoncolumn、datagridviewcheckboxcolumn、datagridviewcomboboxcolumn、datagridviewimagecolumn、datagridviewlinkcolumn和datagridviewtextboxcolumn六种列类型,如果你想要在datagridview的列中添加其它的子控件,则需要自己实现datagridviewcolumn和datagridviewcell,这就意味着你需要从现有的列中继承并改写一些方法,如实现一个支持单选按钮的列,或支持三种选择状态的多选按钮的列。要实现自定义的datagridview列,你需要继承并改写两个类,一个是基于datagridviewcolumn的,一个是基于datagridviewcell的,因为radionbutton和checkbox的实现原理类似,因此我们可以将这两种列采用同一种方法实现。创建datagridviewdisablecheckboxcell和datagridviewdisablecheckboxcolumn两个类,分别继承自datagridviewcheckboxcell和datagridviewcheckboxcolumn。代码如下:public class datagridviewdisablecheckboxcell: datagridviewcheckboxcell{ public bool enabled { get; set; } // override the clone method so that the enabled property is copied. public override object clone() { datagridviewdisablecheckboxcell cell = (datagridviewdisablecheckboxcell)base.clone(); cell.enabled = this.enabled; return cell; } // by default, enable the checkbox cell. public datagridviewdisablecheckboxcell() { this.enabled = true; } // three state checkbox column cell protected override void paint(graphics graphics, rectangle clipbounds, rectangle cellbounds, int rowindex, datagridviewelementstates elementstate, object value, object formattedvalue, string errortext, datagridviewcellstyle cellstyle, datagridviewadvancedborderstyle advancedborderstyle, datagridviewpaintparts paintparts) { // the checkbox cell is disabled, so paint the border, background, and disabled checkbox for the cell. if (!this.enabled) { // draw the cell background, if specified. if ((paintparts & datagridviewpaintparts.background) == datagridviewpaintparts.background) { solidbrush cellbackground = new solidbrush(cellstyle.backcolor); graphics.fillrectangle(cellbackground, cellbounds); cellbackground.dispose(); } // draw the cell borders, if specified. if ((paintparts & datagridviewpaintparts.border) == datagridviewpaintparts.border) { paintborder(graphics, clipbounds, cellbounds, cellstyle, advancedborderstyle); } // calculate the area in which to draw the checkbox. checkboxstate state = checkboxstate.mixeddisabled; size size = checkboxrenderer.getglyphsize(graphics, state); point center = new point(cellbounds.x, cellbounds.y); center.x += (cellbounds.width - size.width) / 2; center.y += (cellbounds.height - size.height) / 2; // draw the disabled checkbox. checkboxrenderer.drawcheckbox(graphics, center, state); } else { // the checkbox cell is enabled, so let the base class, handle the painting. base.paint(graphics, clipbounds, cellbounds, rowindex, elementstate, value, formattedvalue, errortext, cellstyle, advancedborderstyle, paintparts); } }}public class datagridviewdisablecheckboxcolumn : datagridviewcheckboxcolumn{ public datagridviewdisablecheckboxcolumn() { this.celltemplate = new datagridviewdisablecheckboxcell(); }}主要是要实现datagridviewdisablecheckboxcell的呈现方式,其中设置了checkboxstate的状态为mixeddisabled,表示支持三种状态,这个是实现效果的核心,如果要实现radiobutton列的效果,只需要将paint方法改成下面这样即可: protected override void paint(graphics graphics, rectangle clipbounds, rectangle cellbounds, int rowindex,datagridviewelementstates elementstate, object value, object formattedvalue, string errortext,datagridviewcellstyle cellstyle, datagridviewadvancedborderstyle advancedborderstyle, datagridviewpaintparts paintparts) { // draw the cell background, if specified. if ((paintparts & datagridviewpaintparts.background) == datagridviewpaintparts.background) { solidbrush cellbackground = new solidbrush(cellstyle.backcolor); graphics.fillrectangle(cellbackground, cellbounds); cellbackground.dispose(); } // draw the cell borders, if specified. if ((paintparts & datagridviewpaintparts.border) == datagridviewpaintparts.border) { paintborder(graphics, clipbounds, cellbounds, cellstyle, advancedborderstyle); } // calculate the area in which to draw the checkbox. radiobuttonstate state = value != null && (selectedstatus)value == selectedstatus.selected ? radiobuttonstate.checkednormal : radiobuttonstate.uncheckednormal; size size = radiobuttonrenderer.getglyphsize(graphics, state); point center = new point(cellbounds.x, cellbounds.y); center.x += (cellbounds.width - size.width) / 2; center.y += (cellbounds.height - size.height) / 2; // draw the disabled checkbox. radiobuttonrenderer.drawradiobutton(graphics, center, state); } 使用radiobuttonstate代替checkboxstate。 当然,上面的代码只是实现了列和单元格的显示效果,在使用过程中当用户点击单选或多选按钮时如何改变状态则需要自己手动编写代码来实现,如在点击单选按钮时将datagridview中其它行的单选按钮设置为未选择状态,点击多选按钮时在三种状态之间转换等。 首先我们需要手动修改form的designer.cs文件中的代码,将checkbox所在的列的类型由datagridviewcheckboxcolumn改成datagridviewdisablecheckboxcolumn,并设置threestate的值为true,这个代码是需要手动去修改的,因为默认情况下vs不支持对自定义datagridview列类型进行可视化编辑。要支持checkbox的三种状态,我们还需要定义一个枚举来给checkbox的truevalue、falsevalue和indeterminatevalue赋值。这个枚举很简单,有三个成员就够了。public enum selectedstatus{ selected, noselected, indeterminate} 然后设置checkbox的truevalue=selectedstatus.selected,falsevalue=selectedstatus.noselected,indeterminatevalue=selectedstatus.indeterminate。 好了!这个时候运行程序,可以看到经过我们改造的列已经可以正常显示了,但是有一个问题, 那就是当我们点击其中的单选或多选按钮时它的状态并不能发生变化,这是因为我们没有在click事件中改变按钮的选择状态。要实现这个功能,你需要给宿主datagridview定义cellcontentclick事件,并且判断当用户点击的是否为你所指定的控件,然后进行相应的处理。代码如下:private void datagridview1_cellcontentclick(object sender, datagridviewcelleventargs e){ if (e.rowindex 》= 0) { datagridviewcolumn column = datagridview1.columns[e.columnindex]; if (column is datagridviewcheckboxcolumn) { datagridviewdisablecheckboxcell cell = datagridview1.rows[e.rowindex].cells[e.columnindex] as datagridviewdisablecheckboxcell; if (!cell.enabled) { return; } if ((selectedstatus)cell.value == selectedstatus.noselected) { cell.value = selectedstatus.selected; } else if ((selectedstatus)cell.value == selectedstatus.selected) { cell.value = selectedstatus.indeterminate; } else { cell.value = selectedstatus.noselected; } } }} 这个是checkbox的,如果是radiobutton的话你还需要控制其它radionbutton的状态,这个时候就没有三种状态而是两种状态了,代码可以修改成这样:private void datagridview1_cellcontentclick(object sender, datagridviewcelleventargs e){ if (e.rowindex 》= 0) { datagridviewcolumn column = datagridview1.columns[e.columnindex]; if (column is datagridviewcheckboxcolumn) { datagridviewdisablecheckboxcell cell = datagridview1.rows[e.rowindex].cells[e.columnindex] as datagridviewdisablecheckboxcell; if (!cell.enabled) { return; } if ((selectedstatus)cell.value == selectedstatus.noselected) { cell.value = selectedstatus.selected; setradiobuttonvalue(cell); } else { cell.value = selectedstatus.noselected; } } }}private void setradiobuttonvalue(datagridviewdisablecheckboxcell cell){ selectedstatus status = (selectedstatus)cell.value; if (status == selectedstatus.selected) { status = selectedstatus.noselected; } else { status = selectedstatus.selected; } for (int i = 0; i 《 datagridview1.rows.count; i++) { datagridviewdisablecheckboxcell cel = datagridview1.rows[i].cells[“checkbox“] as datagridviewdisablecheckboxcell; if (!cel.equals(cell)) { cel.value = status; } }} 函数setradionbuttonvalue负责修改宿主datagridview当前列中其它的radionbutton的状态。 在完成这些工作后,一个相对完整的支持radionbutton或三种状态的checkbox列的datagridview界面就完成了,你可以根据需要在接下来的代码中来判断datagridview中哪些行被选中了,或者哪些行处于未确定的选择状态(checkbox的第三种状态),进而做出判断来完成后面的工作。