在敲机房的时候遇到的第一个问题肯定就是窗体的显示问题了,然而不同的情况有不同的解决方案,但是总体上都是在与MDI窗体的特征在做斗争,在制定 父窗体的情况上有所变化,在容器的选择上有变化,其他的地方是没有变化的。另外在数据显示空间的使用上面是有问题的,所以出此篇博客以叙述
在VB6.0的时候我们就学会利用setparent函数来制定特殊容器来作为窗体的“背景”,其实在VB.NET中也是一个原理,首先来看VB.NET中的函数声明:
Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Integer, ByVal hWndNewParent As Integer) As Integer
然后再这个控件上面画想要的控件和图片,然后以这个Panel为Setparent指定的父容器,就可以显示控件又可以让窗体覆盖在上面了,要不后果是这样的:
代码:
Form2.MdiParent = Me Form2.Show() SetParent(Form2.Handle, Me.Panel1.Handle)
虽然在VB6.0和VB.NET中都有这个DataGridView控件,但是用法却是很不一样。我个人认为VB.NET中的这个控件比VB6.0中的要好很多,可以直接添加数据源,可以自动调整列宽和行高,可以直接指定数据格数,在属性框里面都可以调整,最大的改变就是标题和正式的数据是分隔开的,叫做head。
(1)数据的显示
在这里数据的显示的方法有两种,一种是在控件上直接绑定数据源,在属性DataSource里面可以直接设置,也可以在代码中直接指定,如果用的是泛型(dataTable)的话,可以直接用List容器(直接)指定数据源,显示的数据就是获得的数据表的数据:
Dim TeacherList As New List(Of Model.Work_Log_Info) DataGridView1.DataSource = TeacherList
dgvRecharge.Rows.Add(Result.Count) '数据表添加行,行数等于数据行数 For i = 0 To Result.Count - 1 dgvRecharge.Rows(i).Cells(0).Value() = Result(i).CardNO '变量写入行上的每个数据,rows代表行,Cell代表第几个格 dgvRecharge.Rows(i).Cells(1).Value() = Result(i).ChargeMoney dgvRecharge.Rows(i).Cells(2).Value() = Result(i).ChargeDate dgvRecharge.Rows(i).Cells(3).Value() = Result(i).ChargeTime dgvRecharge.Rows(i).Cells(4).Value() = Result(i).SysOperator dgvRecharge.Rows(i).Cells(5).Value() = Result(i).Status dgvRecharge.Rows(i).Cells(6).Value() = Result(i).IsCheck Next调整行高列宽:
dgvRecharge.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells '按所有的格调整列宽 dgvRecharge.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells '按所有的格调整行高(2)行的选择
首先要设置该表只能按行选择:
在控件的属性里面就可以调整,然后显示数据,在数据的显示后就可以看到数据是整行选择的然后就是获得选择行的数据了,选择行的数据可以通过一个属性来获得:
int rows = dataGridView1.indexrows '获得选种行的索引 string str = dataGridView1.rows[rows].cells[num].text '获取第rows行的索引为num列的值
这次的数据显示和调整列宽,都不是新的知识,只是旧的知识的再利用,有些细微的改变,只要心够细,完全可以自己找出来的,数据的获得和显示可能和之前的有些不同,但是都没有关系,只要去接触,就可以得到想要的。