新手学习DataGridView知识大全①取得或者修改当前单元格的内容②设定单元格只读③不显示最下面的新行④判断新增行⑤行的用户删除操作的自定义⑥行、列的隐藏和删除⑦禁止列或者行的Resize⑧列宽和行高以及列头的高度和行头的宽度的自动调整⑨冻结列或行⑩列顺序的调整⑪行头列头的单元格⑫剪切板的操作⑬单元格的ToolTip的设置⑭右键菜单(ContextMenuStrip)的设置⑮单元格的边框、网格线样式的设定⑯单元格表示值的设定⑰用户输入时,单元格输入值的设定⑱设定新加行的默认值①DataGridView取得或者修改当前单元格的内容:GOTOTOP当前单元格指的是DataGridView焦点所在的单元格,它可以通过DataGridView对象的CurrentCell属性取得。如果当前单元格不存在的时候,返回Nothing(C#是null)[VB.NET]'取得当前单元格内容Console.WriteLine(DataGridView1.CurrentCell.Value)'取得当前单元格的列IndexConsole.WriteLine(DataGridView1.CurrentCell.ColumnIndex)'取得当前单元格的行IndexConsole.WriteLine(DataGridView1.CurrentCell.RowIndex)[C#]//取得当前单元格内容Console.WriteLine(DataGridView1.CurrentCell.Value);//取得当前单元格的列IndexConsole.WriteLine(DataGridView1.CurrentCell.ColumnIndex);//取得当前单元格的行IndexConsole.WriteLine(DataGridView1.CurrentCell.RowIndex);另外,使用DataGridView.CurrentCellAddress属性(而不是直接访问单元格)来确定单元格所在的行:DataGridView.CurrentCellAddress.Y和列:DataGridView.CurrentCellAddress.X。这对于避免取消共享行的共享非常有用。当前的单元格可以通过设定DataGridView对象的CurrentCell来改变。可以通过CurrentCell来设定DataGridView的激活单元格。将CurrentCell设为Nothing(null)可以取消激活的单元格。[VB.NET]'设定(0,0)为当前单元格DataGridView1.CurrentCell=DataGridView1(0,0)[C#]//设定(0,0)为当前单元格DataGridView1.CurrentCell=DataGridView1[0,0];在整行选中模式开启时,你也可以通过CurrentCell来设定选定行。///summary///向下遍历////summary///paramname=sender/param///paramname=e/paramprivatevoidbutton4_Click(objectsender,EventArgse){introw=this.dataGridView1.CurrentRow.Index+1;if(rowthis.dataGridView1.RowCount-1)row=0;this.dataGridView1.CurrentCell=this.dataGridView1[0,row];}///summary///向上遍历////summary///paramname=sender/param///paramname=e/paramprivatevoidbutton5_Click(objectsender,EventArgse){introw=this.dataGridView1.CurrentRow.Index-1;if(row0)row=this.dataGridView1.RowCount-1;this.dataGridView1.CurrentCell=this.dataGridView1[0,row];}*注意:this.dataGridView的索引器的参数是:columnIndex,rowIndex或是columnName,rowIndex这与习惯不同。②DataGridView设定单元格只读:GOTOTOP1)使用ReadOnly属性⇒如果希望,DataGridView内所有单元格都不可编辑,那么只要:[VB.NET]'设置DataGridView1为只读DataGridView1.ReadOnly=True[C#]//设置DataGridView1为只读DataGridView1.ReadOnly=true;此时,用户的新增行操作和删除行操作也被屏蔽了。⇒如果希望,DataGridView内某个单元格不可编辑,那么只要:[VB.NET]'设置DataGridView1的第2列整列单元格为只读DataGridView1.Columns(1).ReadOnly=True'设置DataGridView1的第3行整行单元格为只读DataGridView1.Rows(2).ReadOnly=True'设置DataGridView1的[0,0]单元格为只读DataGridView1(0,0).ReadOnly=True[C#]//设置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方法,使单元格进入编辑模式进行编辑。[VB.NET]DataGridView1.EditMode=DataGridViewEditMode.EditProgrammatically[C#]DataGridView1.EditMode=DataGridViewEditMode.EditProgrammatically;3)根据条件设定单元格的不可编辑状态当一个一个的通过单元格坐标设定单元格ReadOnly属性的方法太麻烦的时候,你可以通过CellBeginEdit事件来取消单元格的编辑。[VB.NET]'CellBeginEdit事件处理方法PrivateSubDataGridView1_CellBeginEdit(ByValsenderAsObject,_ByValeAsDataGridViewCellCancelEventArgs)_HandlesDataGridView1.CellBeginEditDimdgvAsDataGridView=CType(sender,DataGridView)'是否可以进行编辑的条件检查Ifdgv.Columns(e.ColumnIndex).Name=Column1AndAlso_NotCBool(dgv(Column2,e.RowIndex).Value)Then'取消编辑e.Cancel=TrueEndIfEndSub[C#]//CellBeginEdit事件处理方法privatevoidDataGridView1_CellBeginEdit(objectsender,DataGridViewCellCancelEventArgse){DataGridViewdgv=(DataGridView)sender;//是否可以进行编辑的条件检查if(dgv.Columns[e.ColumnIndex].Name==Column1&&!(bool)dgv[Column2,e.RowIndex].Value){//取消编辑e.Cancel=true;}}③DataGridView不显示最下面的新行:GOTOTOP通常DataGridView的最下面一行是用户新追加的行(行头显示*)。如果不想让用户新追加行即不想显示该新行,可以将DataGridView对象的AllowUserToAddRows属性设置为False。[VB.NET]'设置用户不能手动给DataGridView1添加新行DataGridView1.AllowUserToAddRows=False[C#]//设置用户不能手动给DataGridView1添加新行DataGridView1.AllowUserToAddRows=false;但是,可以通过程序:DataGridViewRowCollection.Add为DataGridView追加新行。补足:如果DataGridView的DataSource绑定的是DataView,还可以通过设置DataView.AllowAdd属性为False来达到同样的效果。④DataGridView判断新增行:GOTOTOPDataGridView的AllowUserToAddRows属性为True时也就是允许用户追加新行的场合下,DataGridView的最后一行就是新追加的行(*行)。使用DataGridViewRow.IsNewRow属性可以判断哪一行是新追加的行。另外,通过DataGridView.NewRowIndex可以获取新行的行序列号。在没有新行的时候,NewRowIndex=-1。[VB.NET]IfDataGridView1.CurrentRow.IsNewRowThenConsole.WriteLine(当前行为新追加行。)ElseConsole.WriteLine(当前行不是新追加行。)EndIf⑤DataGridView行的用户删除操作的自定义:GOTOTOP1)无条件的限制行删除操作。默认时,DataGridView是允许用户进行行的删除操作的。如果设置DataGridView对象的AllowUserToDeleteRows属性为False时,用户的行删除操作就被禁止了。[VB.NET]'禁止DataGridView1的行删除操作。DataGridView1.AllowUserToDeleteRows=False[C#]//禁止DataGridView1的行删除操作。DataGridView1.AllowUserToDeleteRows=false;但是,通过DataGridViewRowCollection.Remove还是可以进行行的删除。补足:如果DataGridView绑定的是DataView的话,通过DataView.AllowDelete也可以控制行的删除。2)行删除时的条件判断处理。用户在删除行的时候,将会引发DataGridView.UserDeletingRow事件。在这个事件里,可以判断条件并取消删除操作。[VB.NET]'DataGridView1的UserDeletingRow事件PrivateSubDataGridView1_UserDeletingRow(ByValsenderAsObject,_ByValeAsDataGridViewRowCancelEventArgs)_HandlesDataGridView1.UserDeletingRow'删除前的用户确认。IfMessageBox.Show(确认要删除该行数据吗?,删除确认,_MessageBoxButtons.OKCancel,MessageBoxIcon.Question)_Windows.Forms