DataGridView.DataSource= list(Of T)

      注:本文例子的代码承接上篇文章:DataTable填充实体类返回泛型集合。

      在D层查询完成之后,我们将DataTable转化为泛型集合,然后经过中间各层,返回U层,到了这里,问题来了,我们这时候要将这个集合作为数据源绑定到DataGridView上,并将结果显示出来,本文主要介绍的就是如何将集合显示在DataGridView上的问题。(或许你返回的是datatable或一个实体,它们加载数据的原理是一至滴~)

      一,显示实体的全部属性

            当DataGridView的列名就是Class T的属性的时候,这时,只需要绑定数据源,然后手动更改列名就好。

      <span style="font-size:14px;"> '将dt转换为泛型集合
        myList = EntityHelper.convertToList(Of EntityUser)(dt)

        TextBox1.Text = myList.Count    '在文本框里面显示出查询到的教师数目

        If (myList.Count > 0) Then      '如果查询到记录
            ''''将查询到的数据显示到DataGridView中
            myDataGrid.DataSource = myList  '设置控件的数据源:但是这样设置还不够,因为列的名字显示出来还是英文的,所以,还应该设置没列的名字。

            '修改列名
            myDataGrid.Columns(0).HeaderText = "卡号"
            myDataGrid.Columns(1).HeaderText = "密码"
            myDataGrid.Columns(2).HeaderText = "教师姓名"
            myDataGrid.Columns(3).HeaderText = "教师级别"
            myDataGrid.Columns(4).HeaderText = "注册日期"
            myDataGrid.Columns(5).HeaderText = "注册时间"
            myDataGrid.Columns(6).HeaderText = "注销日期"
            myDataGrid.Columns(7).HeaderText = "注销时间"
            myDataGrid.Columns(8).HeaderText = "上机状态"

        Else
            MsgBox("没有查询到任何记录!")
        End If</span>

显示结果如下:

 

  二,显示Class T 的部分属性

                   有时候,我们并不是要显示T 的全部属性,只需要显示一部分,比如,我们在显示教师信息的时候,可能不需要显示教师的密码,这时候该怎么办呢?

           方法一:加载完所有数据后手动移除列

                    如上图中,如果我想移除密码这一列,只需在加载完所有数据后,再加上一句代码:

         

            '加载完所有数据后手动移除密码这一列
            myDataGrid.Columns.Remove("Pwd")

                当再次显示,结果就如下图:

         

              虽然也能实现想要的效果,但是总感觉这么做有点儿雷,就好像吃了东西再吐出来那样,反正我是不用。还是看看别的方法吧。

              方法二:设置DataPropertyName属性

                         例如,我现在只想显示用户名,首先,右击窗体上的DataGridView控件,然后选择编辑列:

添加一个叫用户名的列,然后设置列的DataPropertyName属性,通过这个属性,可以设置绑定到实体的某个属性值,datatable的某个列等。  这里的DataPropertyName值要跟实体的属性名对应

           之后,我们在代码里面写入

  <span style="font-size:18px;">       myDataGrid.AutoGenerateColumns = False  '不允许自动添加列
        myDataGrid.DataSource = myList '设置数据源</span>

            这样就ok了~

        运行下,可以看到这种效果:

       

         小结:

                   真心感觉DataGridView这个空间非常好用,直接绑定数据源就可以显示数据。

           而且如果在D层,查询完成之后,就将datatable转化为实体集,当结果传到U层DataGridView显示的时候,直接指定dataSource为实体集合,那么,整个过程没有像以前vb中MSHFlexGrid控件那样:

             

          

        这个过程每次都要一行一行的赋值,避免了filds属性在指定时出错的问题,而且代码更简洁了,我们的工作量也大大减少了。

时间: 2024-10-07 02:02:18

DataGridView.DataSource= list(Of T)的相关文章

C++: DataGridView::DataSource

#pragma once #include "Form2.h" namespace cdemo { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::

两个简单方法加速DataGridView

datagrid DataGridView虽然好用,但是如果数据量比较大的话就会出现性能的问题.网上提供的一般做法是通过虚拟模式(Virtual Mode)来加速.但是有的时候,可以通过简单的设置来加速DataGridView. (1)使用绑定数据.就是通过加载DataTable然后通过BindingSource来和DataGridView.DataSource进行交互. (2)不要使用AutoSizeColumnsMode.AllCells.如果这么设置,DataGridView只有等到所有的

DataGridView怎么调整列宽

DataGridView有一个属性是AutoSizeColumnMode,他有几个枚举值: 1.AllCells 调整列宽,以适合该列中的所有单元格的内容,包括标题单元格. 2.AllCellsExceptHeader 调整列宽,以适合该列中的所有单元格的内容,不包括标题单元格. 3.ColumnHeader 调整列宽,以适合列标题单元格的内容. 4.DisplayedCells 调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,包括标题单元格. 5.DisplayedCellsExc

自定义控件-自定义DataGridview下拉输入不同单元就不显示了

问题描述 自定义DataGridview下拉输入不同单元就不显示了 1C using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.Text;using System.Windows.Forms;using System.Drawing.Design;using System.Data.Common;us

c-C# 人员管理小系统 信息加入 不用数据库 DataGridView

问题描述 C# 人员管理小系统 信息加入 不用数据库 DataGridView C#人员管理小系统 有 namespace 人员管理 { public class Person { public int id;//学号 public string name;//姓名 public int sex;//性别 public int age;//年龄 public DateTime time;//出生日期 } } 然后需要添加20人的信息 不需要使用数据库 最后用DataGridView显示出来 怎么

dataset-求教,,,datagridview竟然不显示数据???求解,,,

问题描述 求教,,,datagridview竟然不显示数据???求解,,, string SQL_C = ""select Interior_idlocationlocation_Xlocation_Y from SlipSand_slope_1""; DataSet DS = new DataSet(); DS = DataOperate.DS(SQL_C); DataGridView DGV = new DataGridView(); DGV.DataSourc

关于c#的datagridview的一些问题,急急急

问题描述 我希望选combobox的一项,再按query按钮,在datagridview里就可以显示combobox选中的内容(datagridview不知这一项,还要三项是通过从combobox里得到的第一项从数据库中得到),现在数据库没有建,只是这样[Serializable][TableName("RMS_EQUIPMENT_GROUPS")]publicclassEquipmentGroupEntity:CommonEntity{[ColumnName("EQUIPM

我想把数据库中的一张表导入到datagridview中为什么老是实现不了

问题描述 解决方案 解决方案二:调用这个函数了吗?你在函数倒手第二行设个断点,看下ds里有木有数据另建议:con.Open()和con.Clos()两行代码可以注销掉,此处用不上解决方案三:这个函数在之前用Form1_Load调用过但是就是不显示也不知道为什么解决方案四:断点跟啊,看到底走没走,走到哪里了,报错了没有,有没有数据解决方案五:引用楼主ZWLIN1991的回复:先查看数据库连接是否正常?再查ds中的table中是否有数据?解决方案六:学会自己断点跟,否则有10000分也不够你问问题的

datagridview在win7,win10显示慢的问题

问题描述 大家好.我写了一个程序,有一个9列*40行的datagridview(由于需要显示颜色特性,我是逐行添加数据的).在win7,win10的环境下运行时datagridview加载时有明显的刷新过程,而同样的程序在xp运行则没有该问题,请问是何原因,能如何解决?ps:我将逐行添加数据修改为直接绑定datagridview.datasource也有该问题. 解决方案 解决方案二:刷新过程应该在xp上也存在吧.就算是你直接绑定datagridview.datasource也会刷新的.建议你最