机房进行了20天左右,越来越得心应手,比第一次敲的时候自信了很多,而且也感觉自己越来越专业了,原来看师哥师姐的博客说敲下来七层登录这条线,之后路就简单多了,现在想想确实如此,其实软件工程师这条路和别的路一样,都是需要脚踏实地去走的,米老师常说,学习是个过程,我们遇到的困难其实也不能称之为困难,因为他们根本没有难到那个程度,他们只能称之为问题,而且我们要做的就是遇到问题,解决问题,简单粗暴但一向好使。热血鸡汤不再撒了,直接总结了,今天想要总结一下我很喜欢的一个控件:DataGridView
查了很多资料,其实DataGridView就是DataView的升级版本,相比后者,前者增添了很多新的功能,封装性也更好了,下边关于两者的对比是引用自我师父的博客:
下表描述了DataGridView提供而DataGrid未提供的几个主要功能。
DataGridView功能 |
描述 |
多种列类型 |
与DataGrid相比,DataGridView 提供了许多其他的内置列类型。这些列类型能够满足大部分常见须要,而且比DataGrid中的列类型易于扩展或替换。 |
多种数据显示方式 |
DataGrid仅限于显示外部数据源的数据。而DataGridView则能够显示非绑定的数据,绑定的数据源,或者同一时候显示绑定和非绑定的数据。你也能够在DataGridView中实现virtual mode,实现自己定义的数据管理。 |
用于自己定义数据显示的多种方式 |
DataGridView提供了许多属性和事件,用于数据的格式化和显示。比方,你能够依据单元格、行和列的内容改变其外观,或者使用一种类型的数据替代还有一种类型的数据。 |
用于更改单元格、行、列、表头外观和行为的多个选项 |
DataGridView使你能够以多种方式操作单个网格组件。比方,你能够冻结行和列,避免它们因滚动而不可见;隐藏行、列、表头;改变行、列、表头尺寸的调整方式;为单个的单元格、行和列提供工具提示(ToolTip)和快捷菜单。 |
唯一的一个DataGrid提供而DataGridView未提供的特性是两个相关表中数据的分层次显示(比方常见的主从表显示)。你必须使用两个DataGridView来显示具有主从关系的两个表的数据。
DataGridView的亮点
DataGridView控件特性 |
描述 |
多种列类型 |
DataGridView提供有TextBox、CheckBox、Image、Button、ComboBox和Link类型的列及对应的单元格类型。 |
多种数据显示方式 |
DataGrid仅限于显示外部数据源的数据。而DataGridView则能够显示非绑定的数据,绑定的数据源,或者同一时候显示绑定和非绑定的数据。你也能够在DataGridView中实现virtual mode,实现自己定义的数据管理。 |
自己定义数据的显示和操作的多种方式 |
DataGridView提供了许多属性和事件,用于数据的格式化和显示。 此外,DataGridView提供了操作数据的多种方式,比方,你能够:
|
用于更改单元格、行、列、表头外观和行为的多个选项 |
DataGridView使你能够以多种方式操作单个网格组件。比方,你能够:
|
提供丰富的可扩展性的支持 |
DataGridView提供易于对网格进行扩展和自己定义的基础结构,比方:
|
优点:
1.直接绑定数据源,减少了代码的书写量,而且几乎都是自动生成的代码,很方便。
2.更加美观大方,对于数据的处理更加全面,可以在表格内根据内容进行排序,觉得瞬间提高了逼格和档次
3.操作起来更加便利,不管是数据库中的表还是视图亦或是泛型数组都可以用datagridview来显示
缺点:
1.违背三层架构原则
表和数据源绑定固然轻松愉悦心情好,但是别忘记这样做也有不美丽的地方,那就是违反了三层的基本原则,因为三层架构的原则就是U层接触用户,B层逻辑判断,D层和数据库打交道,如果控件绑定数据源了,那么就相当于U层直接调用了数据库,这样做的结果就是耦合程度变高了,如果要修改了某张表的某个字段名,我们还得打开U层去改响应的字段名
上边讲了这么多,没有接触过的同学一定云里雾里了吧,下边就看个实例来加深理解,举个简单的例子——添加和删除用户
1.进行DataGridView和数据源的绑定
2.表格属性的设置
点击第一步的小三角,选择“编辑列”
3.添加查询
依然点击小三角,然后选择“添加查询”
4.编写代码
当你设置好上边的所有项目之后,会发现,控件君自动生成了几行代码,点个赞~只需要按照你的想法将这几行代码挪挪地儿,改改名,大功就告成了!
代码如下,写的在详细点就一点思考空间也没有啦~~
Private Sub frmModifyUser_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'TODO: 这行代码将数据加载到表“UserInfoDS.User_Info”中。您可以根据需要移动或删除它。 'Me.User_InfoTableAdapter.Fill(Me.UserInfoDS.User_Info) InquireUserToolStrip.Hide() cboUserLevel.Items.Add("一般用户") cboUserLevel.Items.Add("操作员") cboUserLevel.Items.Add("管理员") End Sub Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboUserLevel.SelectedIndexChanged ToolComboLevel.Text = cboUserLevel.SelectedItem.ToString() '将自己添加的Combo中的内容赋给ToolStripTextBox控件 Try Me.User_InfoTableAdapter.Fill(Me.UserInfoDS.User_Info) Me.User_InfoTableAdapter.inquireUser(Me.UserInfoDS.User_Info, ToolComboLevel.Text) gridUser.AllowUserToAddRows = False '删除最后一行空行 Catch ex As System.Exception System.Windows.Forms.MessageBox.Show(ex.Message) End Try End Sub
其实每一个控件都有自己的性格和他们特殊的用处,他们就像用来打仗的武器,我们要懂得他们的好,才能得心应手的使用,下一章总结一下泛型和这个控件的绑定问题