vb.net datagridview 无法添加行

DataGridView在vb.net中的操作技巧 - Kevin Gao - 博客园
Powered by:
模板提供:
1、 取得或者修改当前单元格的内容
2、 设定单元格只读
3、 不显示最下面的新行
4、 判断新增行
5、 行的用户删除操作的自定义
6、 行、列的隐藏和删除
7、 禁止列或者行的Resize
8、 列宽和行高以及列头的高度和行头的宽度的自动调整
9、 冻结列或行
10、 列顺序的调整
11、 行头列头的单元格
12、 剪切板的操作
13、 单元格的ToolTip的设置
14、 右键菜单(ContextMenuStrip)的设置
15、 单元格的边框、 网格线样式的设定
16、 单元格表示值的设定
17、 用户输入时,单元格输入值的设定
18、 设定新加行的默认值
1、 DataGridView 取得或者修改当前单元格的内容:
当前单元格指的是 DataGridView 焦点所在的单元格,它可以通过 DataGridView 对象的 CurrentCell 属性取得。如果当前单元格不存在的时候,返回Nothing(C#是null)
' 取得当前单元格内容&&&MessageBox.Show(DataGridView1.CurrentCell.Value)
' 取得当前单元格的列 Index
MessageBox.Show(DataGridView1.CurrentCell.ColumnIndex)
' 取得当前单元格的行 Index
MessageBox.Show(DataGridView1.CurrentCell.RowIndex)
另外,使用 DataGridView.CurrentCellAddress 属性(而不是直接访问单元格)来确定单元格所在的行:DataGridView.CurrentCellAddress.Y 和列: DataGridView.CurrentCellAddress.X 。这对于避免取消共享行的共享非常有用。
当前的单元格可以通过设定 DataGridView 对象的 CurrentCell 来改变。可以通过 CurrentCell 来设定
DataGridView 的激活单元格。将 CurrentCell 设为 Nothing(null) 可以取消激活的单元格。
' 设定 (0, 0) 为当前单元格
DataGridView1.CurrentCell = DataGridView1(0, 0)
--------------------------------------------------------------------------------
2、 DataGridView 设定单元格只读:
1) 使用 ReadOnly 属性
 如果希望,DataGridView 内所有单元格都不可编辑, 那么只要:
' 设置 DataGridView1 为只读
DataGridView1.ReadOnly = True
如果希望,DataGridView 内某个单元格不可编辑, 那么只要:
' 设置 DataGridView1 的第2列整列单元格为只读
DataGridView1.Columns(1).ReadOnly = True
' 设置 DataGridView1 的第3行整行单元格为只读
DataGridView1.Rows(2).ReadOnly = True
' 设置 DataGridView1 的[0,0]单元格为只读
DataGridView1(0, 0).ReadOnly = True
2) 使用 EditMode 属性
DataGridView.EditMode 属性被设置为 DataGridViewEditMode.EditProgrammatically 时,用户就不能手动编辑单元格的内容了。但是可以通过程序,调用 DataGridView.BeginEdit 方法,使单元格进入编辑模式进行编辑。
DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically
3) 根据条件设定单元格的不可编辑状态
当一个一个的通过单元格坐标设定单元格 ReadOnly 属性的方法太麻烦的时候,你可以通过 CellBeginEdit 事件来取消单元格的编辑。
'CellBeginEdit 事件处理方法
Private Sub DataGridView1_CellBeginEdit(ByVal sender As Object, _
ByVal e As DataGridViewCellCancelEventArgs) _
Handles DataGridView1.CellBeginEdit
Dim dgv As DataGridView = CType(sender, DataGridView)
' 是否可以进行编辑的条件检查
If dgv.Columns(e.ColumnIndex).Name = &Column1& AndAlso _
Not CBool(dgv(&Column2&, e.RowIndex).Value) Then
' 取消编辑
e.Cancel = True
--------------------------------------------------------------------------------
3、 DataGridView 不显示最下面的新行:
通常 DataGridView 的最下面一行是用户新追加的行(行头显示 * )。如果不想让用户新追加行即不想显示该新行,可以将 DataGridView 对象的 AllowUserToAddRows 属性设置为 False。
' 设置用户不能手动给 DataGridView1 添加新行
DataGridView1.AllowUserToAddRows = False
补足: 如果 DataGridView 的 DataSource 绑定的是 DataView, 还可以通过设置 DataView.AllowAdd
属性为 False 来达到同样的效果。
--------------------------------------------------------------------------------
4、 DataGridView 判断新增行:
DataGridView的AllowUserToAddRows属性为True时也就是允许用户追加新行的场合下,DataGridView的最后一行就是新追加的行(*行)。使用 DataGridViewRow.IsNewRow 属性可以判断哪一行是新追加的行。另外,通过DataGridView.NewRowIndex 可以获取新行的行序列号。在没有新行的时候,NewRowIndex = -1。[VB.NET]
If DataGridView1.CurrentRow.IsNewRow Then
Console.WriteLine(&当前行为新追加行。&)
Console.WriteLine(&当前行不是新追加行。&)
--------------------------------------------------------------------------------
5、 DataGridView 行的用户删除操作的自定义:
1) 无条件的限制行删除操作。
默认时,DataGridView 是允许用户进行行的删除操作的。如果设置 DataGridView对象的AllowUserToDeleteRows属性为 False 时, 用户的行删除操作就被禁止了。
' 禁止DataGridView1的行删除操作。
DataGridView1.AllowUserToDeleteRows = False
但是,通过 DataGridViewRowCollection.Remove 还是可以进行行的删除。
补足: 如果 DataGridView 绑定的是 DataView 的话,通过 DataView.AllowDelete 也可以控制行的删除。
2) 行删除时的条件判断处理。
用户在删除行的时候,将会引发 DataGridView.UserDeletingRow 事件。 在这个事件里,可以判断条件并取消删除操作。
' DataGridView1 的 UserDeletingRow 事件
Private Sub DataGridView1_UserDeletingRow(ByVal sender As Object, _
ByVal e As DataGridViewRowCancelEventArgs) _
Handles DataGridView1.UserDeletingRow
' 删除前的用户确认。
If MessageBox.Show(&确认要删除该行数据吗?&, &删除确认&, _
MessageBoxButtons.OKCancel, MessageBoxIcon.Question) && _
Windows.Forms.DialogResult.OK Then
' 如果不是 OK,则取消。
e.Cancel = True
--------------------------------------------------------------------------------
6、 DataGridView 行、列的隐藏和删除:
1) 行、列的隐藏
' DataGridView1的第一列隐藏
DataGridView1.Columns(0).Visible = False
' DataGridView1的第一行隐藏
DataGridView1.Rows(0).Visible = False
2) 行头、列头的隐藏
' 列头隐藏
DataGridView1.ColumnHeadersVisible = False
' 行头隐藏
DataGridView1.RowHeadersVisible = False
3) 行和列的删除
' 删除名为&Column1&的列
DataGridView1.Columns.Remove(&Column1&)
' 删除第一列
DataGridView1.Columns.RemoveAt(0)
' 删除第一行
DataGridView1.Rows.RemoveAt(0)
4) 删除选中行
For Each r As DataGridViewRow In DataGridView1.SelectedRows
If Not r.IsNewRow Then
DataGridView1.Rows.Remove(r)
--------------------------------------------------------------------------------
7、 DataGridView 禁止列或者行的Resize:
1) 禁止所有的列或者行的Resize
' 禁止用户改变DataGridView1的所有列的列宽
DataGridView1.AllowUserToResizeColumns&= False
'禁止用户改变DataGridView1の所有行的行高
DataGridView1.AllowUserToResizeRows = False
2) 禁止指定行或者列的Resize
' 禁止用户改变DataGridView1的第一列的列宽
DataGridView1.Columns(0).Resizable = DataGridViewTriState.False
' 禁止用户改变DataGridView1的第一列的行宽
DataGridView1.Rows(0).Resizable = DataGridViewTriState.False
关于 NoSet
当 Resizable 属性设为 DataGridViewTriState.NotSet 时, 实际上会默认以 DataGridView 的 AllowUserToResizeColumns&和 AllowUserToResizeRows 的属性值进行设定。比如: DataGridView.AllowUserToResizeColumns&= False 且 Resizable 是 NoSet 设定时,Resizable = False 。
判断 Resizable 是否是继承设定了 DataGridView 的 AllowUserToResizeColumns&和 AllowUserToResizeRows 的属性值, 可以根据 State 属性判断。如果 State 属性含有 ResizableSet,那么说明没有继承设定。
3) 列宽和行高的最小值的设定
' 第一列的最小列宽设定为 100
DataGridView1.Columns(0).MinimumWidth = 100
' 第一行的最小行高设定为 50
DataGridView1.Rows(0).MinimumHeight = 50
4) 禁止用户改变行头的宽度以及列头的高度
' 禁止用户改变列头的高度
DataGridView1.ColumnHeadersHeightSizeMode = _
DataGridViewColumnHeadersHeightSizeMode.DisableResizing
' 禁止用户改变行头的宽度
DataGridView1.RowHeadersWidthSizeMode = _
DataGridViewRowHeadersWidthSizeMode.EnableResizing
--------------------------------------------------------------------------------
8、 DataGridView 列宽和行高自动调整的设定:
1) 设定行高和列宽自动调整
' 设定包括Header和所有单元格的列宽自动调整
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
' 设定包括Header和所有单元格的行高自动调整
DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
2)指定列或行自动调整
' 第一列自动调整
DataGridView1.Columns(0).AutoSizeMode = _
DataGridViewAutoSizeColumnMode.DisplayedCells
3) 设定列头的高度和行头的宽度自动调整[VB.NET]
' 设定列头的宽度可以自由调整
DataGridView1.ColumnHeadersHeightSizeMode = _
DataGridViewColumnHeadersHeightSizeMode.AutoSize
' 设定行头的宽度可以自由调整
DataGridView1.RowHeadersWidthSizeMode = _
DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders
4) 随时自动调整
a, 临时的,让列宽自动调整,这和指定AutoSizeColumnsMode属性一样。[VB.NET]
' 让 DataGridView1 的所有列宽自动调整一下。
DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)
' 让 DataGridView1 的第一列的列宽自动调整一下。
DataGridView1.AutoResizeColumn(0, DataGridViewAutoSizeColumnMode.AllCells)
b,临时的,让行高自动调整
' 让 DataGridView1 的所有行高自动调整一下。
DataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells)
' 让 DataGridView1 的第一行的行高自动调整一下。
DataGridView1.AutoResizeRow(0, DataGridViewAutoSizeRowMode.AllCells)
c,临时的,让行头和列头自动调整
' 列头高度自动调整
DataGridView1.AutoResizeColumnHeadersHeight()
' 行头宽度自动调整
DataGridView1.AutoResizeRowHeadersWidth( _
DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
关于性能:
通过 AutoSizeColumnsMode 或者 AutoSizeRowsMode 属性所指定的单元格进行自动调整时,如果调整次数过于多那么将可能导致性能下降,尤其是在行和列数比较多的情况下。在这时用 DisplayedCells 代替 AllCells 能减少非所见的单元格的调整,从而提高性能。
阅读(...) 评论()共有612位成员   人气指数 -   最新排名 -
【话题】数据绑定时 无法以编程方式向datagridview 添加行
10:35:08 来自:happy小宝宝 浏览数:91次
连接数据库并显示到datagridview中
Dim connDbStr As String
& & & & connDbStr = &Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\****\数据表名.&
& & & & connDbStr = connDbStr & &Jet OLEDB:Database Password=12345&
& & & & Dim conn As OleDbConnection = New OleDbConnection(connDbStr)
& & & & conn.Open()
& & & & Dim SQLCommand As String = &select * from 数据表名&
& & & & Dim da As OleDbDataAdapter = New OleDbDataAdapter(SQLCommand, conn)
& & & & Dim ds As New DataSet
& & & & da.Fill(ds, &数据表名&)
& & & & DataGridView1.DataSource = ds.Tables(&数据表名&).DefaultView
& & & & conn.Close()
& & & & conn.Dispose()
& & & & da.Dispose()
& & & & ds.Dispose()
显示正常后 有一个“添加”按钮,但点击时添加一个新行,然后把textbox中的内容填入新行,
DataGridView1.Rows.Add()& &
‘’在此句及报错
a = DataGridView1.Rows.Count
& & & & DataGridView1.Rows(a - 2).Cells(0).Value = a - 1
& & & & DataGridView1.Rows(a - 2).Cells(1).Value = TextBox1.Text
& & & & DataGridView1.Rows(a - 2).Cells(2).Value = TextBox2.Text
& & & & DataGridView1.Rows(a - 2).Cells(3).Value = TextBox3.Text
& & & & DataGridView1.Rows(a - 2).Cells(4).Value = TextBox4.Text
& & & & DataGridView1.Rows(a - 2).Cells(5).Value = TextBox5.Text
报错,提示“当控件被数据绑定时,无法以编程方式向datagridview的行集合中添加行”
请问如何才能添加一个新行并把内容填充新行。谢谢!情大家帮忙
qunzon回复于18日10点52分 
修改数据表,然后重新绑定
VB.NET code
dim tb as datatable=ds.Tables(&数据表名&)
Dim newRow As DataRow
newRow = tb.NewRow()
newRow(&项号&) = &sdasd&
tb.Rows.Add(newRow)
好好先生回复于18日10点59分 
介绍的第一种方法可以增加一行,再次点击按钮增加新行的时候就又报错误了,还是类型强制转换的问题
yzx26回复于18日11点06分 
错误:未将对象引用设置到对象的实例。newRow = tb.NewRow()
还有kasdhfk 是什么?
宝蛋子回复于18日11点13分 
不用理会kasdhfk...
yumama回复于18日11点21分 
Sorry,写太快了,漏写了DataSource.
Dim dt as DataTable=CType(me.DataGridView1,DataTable)
Dim dt as DataTable=CType(me.DataGridView1.DataSource,DataTable)
tangsong001回复于18日11点28分 
VB.NET code
dim tb as datatable=ds.Tables(&数据表名&)
Dim newRow As DataRow
newRow = tb.NewRow()
newRow(0).Value = a - 1
newRow(1).Value = TextBox1.Text
newRow(2).Value = TextBox2.Text
newRow(3).Value = TextBox3.Text
newRow(4).Value = TextBox4.Text
newRow(5).Value = TextBox5.Text
tb.Rows.Add(newRow)
DataGridView1.DataSource= tb
花花爸回复于18日11点35分 
方法一:给绑定的DataGridView新增一行,再添加数据。
方法二:先把数据添加到数据源里面,再重新绑定。
admama回复于18日11点42分 
还是有错误,“未将对象引用设置到对象的实例” 帮帮忙
guoyi回复于18日11点46分 
newRow(&项号&) 项号就是列序号 0 1 2 等等 第几列
熊猫FUWA回复于18日11点56分 
完成的修改後的代碼如下:
DataGridView的DataSource设定后就不能用其自带的方法去加入新的一行,有两种方法去解决LZ的问题
1.通过数据源新加一行后再设置DataGridView的数据源,示例代码如下:
Dim dt as DataTable=CType(me.DataGridView1.DataSource,DataTable)
Dim dr as DataRow=dt.NewRow()
'Set Value
dr(0)= me. DataGridView1.RowCount-1
dr(1)= TextBox1.Text
dr(2)= TextBox2.Text
dr(3)= TextBox3.Text
dr(4)= TextBox4.Text
dr(5)= TextBox5.Text
'Add Row To DataTable
dt.Rows.Add(dr)
'重新设置DataGridView的数据源
'Clear History DataSource
Me.DataGridView1.DataSource=Nothing
'Set New Data Source
Me.DataGridView1.DataSource=dt
爱的泪水回复于18日12点02分 
添加到数据源,然后在绑定,该如何操作?是指点此添加然后就生成数据库文件,然后在重新打开并显示到datagridview中?& & & 这方面不是太懂,请指导!最好有代码
妞妞爸爸回复于18日12点10分 
在绑定好后如果想要添加行是不行的,除非你在客户端用脚本添加。
我就搞不懂为什么你不再数据源中添加后再重新绑定?而一定要直接添加一行?
如果在绑定后还能让你再添加行,那么会导致GridView的功能混乱,例如GridView的行的数量,是通过在数据绑定时确定下来的,在客户端回传时自动恢复相关子控件的值,如果可以让你动态添加,那么微软在实现GridView控件的时候会麻烦很多,而且这样的功能确实没有必要,可以通过其它更好的方式来解决。
mengmeng回复于18日12点16分 
楼上 newRow(&项号&) = &sdasd&
??这句是什么意思?
cuiyouyi回复于18日12点25分 
如何才能给绑定的datagridview增加一行呢,谢谢?请指教
蓝晶仙子回复于18日12点30分 
得分回复需要阅读,请登录CSDN!
晴天妈妈回复于18日12点39分 
得分回复需要阅读,请登录CSDN!
李梦琪回复于18日12点44分 
各位帮帮忙吧
音乐小猪回复于18日12点49分 
结题,谢谢各位的热情帮助。谢谢。现将解决问题说明
9楼的sky朋友的代码只需把最后句Me.DataGridView1.DataSource=dt.DefaultView
改为Me.DataGridView1.DataSource=dt 即可实现增加多行的功能如果不改只能
增加一行。希望能对碰见相同问题的朋友有所帮助。同时谢谢大家。谢谢!
VB.NET的其他话题...
热门脚本语言:vb.net datagridview 控件如何删除一个行?
vb.net datagridview 控件如何删除一个行?
08-09-21 & 发布
看你datagridview是怎么设置数据源的,如果是datatable,dataset那就先删除其中的某行再绑定,如果是手动添加的数据库 循环找到要删除的那一行直接删就行
请登录后再发表评论!
区分一下datagridview 上的数据的来源,绑定的话,直接操作数据源,然后再绑定
自己添加数据的话,就只好循环遍历了,找到对应的数据再删除
请登录后再发表评论!
..&& 网络学院 && 程序设计 && VB专区 && 控件集锦  [控件集锦]如何让用户自行输入方程式,并计算其结果?
09-03 [控件集锦]VB中处理长列表框项的两种方法 ...[控件集锦]一劳永逸让VB自动改变控件大小
09-03 [控件集锦]用MMControl控件播放M3U文件的实现
请登录后再发表评论!
基 础 教 程a href=&& target=&_blank&vb基础教程VBa href=&.hur/web/Soft/vb/vb03/7.html& target=&_blank&.hur/web/Soft/vb/vb03/7.html/aa href=&2.ratvu/dubiao/kcxx/VB/VBjdsl/& target=&_blank&2.ratvu/dubiao/kcxx/VB/VBjdsl//a
请登录后再发表评论!
datagrid 的id为dg1第一列的checkbox的id为chksystem.web.ui.webcontrols.checkbox chk=new checkbox();foreach (datagriditem dgitem in dg1.items){   if(chk.checked){//判断是否选中了       ...   }}
请登录后再发表评论!
visual studio 是 visual 产品的合集包括 visual Basicvisual C++visual Foxpro都是微软的产品目前最流行的C语言有以下几种:Microsoft C 或称 MS C 即 VCBorland Turbo C 或称 Turbo CAT&T C在C的基础上,一九八三年又由贝尔实验室的Bjarne Strou-strup推出了C++C++目前流行的有 Borland C++ 、Symantec C++ 、Microsoft VisualC++ VB 是最基础的相对比较简单功能也差一些
请登录后再发表评论!DataGridView单元格合并VB实现_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
DataGridView单元格合并VB实现
D​a​t​a​G​r​i​d​V​i​e​w​单​元​格​合​并​V​B​.​N​E​T​实​现
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢如何在vb.net中的dataGridView1中添加数据表的行
如何在vb.net中的dataGridView1中添加数据表的行
09-06-25 &匿名提问 发布}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信