机房重构---DataGridView控件(四)---显示数据
我们在D层从数据库中查询出符合我们要求的数据,需要在DataGridView控件上显示出来,怎么做呢?
根据不同显示列的方法,显示数据也有不同的方法
Case1绑定数据源添加列显示数据
两种情况:
一、需要先显示所有数据,然后按照筛选条件显示数据
我们绑定好数据源,运行窗体的时候,我们绑定的所有数据就显示出来了。但是,并不是所有的数据都是我们需要的,我们需要的可能只是满足某些条件的数据。怎么办呢?我们在D层的sql语句中对我们需要的数据进行筛选,返回DataTable类型的对象接收,一层一层的返回。
D层:筛选我们需要的数据
using IDAL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DAL
{
public class AddorDeleteDAL:AddorDeleteIDAL
{
SQLHelper sqlHelper = new SQLHelper();
public DataTable InqUser(Entity.User user)
{
SqlParameter[] sqlParms = { new SqlParameter("@authority", user.Authority) };
string sql = "select * from [User] where Authority=@authority";
DataTable table = sqlHelper.ExecuteQuery(sql, sqlParms, CommandType.Text);
return table;
}
}
}
除了U层以外,其他层的写法都千篇一律,这里就不多说了,直接看U层
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace LoginUI
{
public partial class FrmAddorDeleteUser : Form
{
public FrmAddorDeleteUser()
{
InitializeComponent();
}
Entity.User user = new Entity.User();
Facade.AddorDeleteFacade facade = new Facade.AddorDeleteFacade();
private void FrmAddorDeleteUser_Load(object sender, EventArgs e)
{
this.userTableAdapter.Fill(this.loginDataSet.User);// TODO: 这行代码将数据加载到表“loginDataSet.User”中。您可以根据需要移动或删除它。
comAuthority.Items.Add("一般用户");
comAuthority.Items.Add("操作员");
comAuthority.Items.Add("管理员");
}
private void comAuthority_SelectedIndexChanged(object sender, EventArgs e)
{
user.Authority = comAuthority.Text;//获取用户选择的条件,传给实体
DataTable table = facade.InqUser(user);
if(table.Rows.Count==0)//如果从数据库中查出来的数据为空
{
MessageBox.Show("没有符合条件的数据!");
}
else
{
dataGridView1.DataSource = table;//显示从数据库中查出来的数据
}
}
}
}
绑定数据源之后,系统自动生成一行代码,意思是在系统运行之后,自动加载绑定User表的所有数据。
获取用户选择的条件,传给实体
定义DataTable类型的table对象接收调用外观层的InqUser方法返回来的值
判断返回值的行数是否为空,如果为空,提示没有符合条件的数据;不为空,显示查询到的结果
二、直接按照筛选条件显示数据
如果我们不需要在程序运行显示所有数据,而是按照我们的筛选条件显示数据的话,有一个非常简单的做法:
单击dataGridView控件的小按钮,选择添加查询
在查询文本中输入查询条件就可以了
Case2手动添加列显示数据
手动绑定列也分为两种情况:
一、按照顺序添加了一张表的所有字段
这里定义了一数组,按照顺序依次给表里的字段赋值
private void btnInquiry_Click_1(object sender, EventArgs e)
{
DataTable list1 = facade.inqPersonaldata(student);//定义DataTable类型的list接收调用外观层传回来的数据
foreach (DataRow line in list1.Rows)//循环list1
{
dataGridView.RowHeadersVisible = false; //隐藏行头
dataGridView.Rows.Add(line.ItemArray); //绑定数组,按照顺序依次赋值
dataGridView.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.AllCells; //列宽自动适应数据的长度
dataGridView.AllowUserToAddRows = false;//不能添加行
}
}
二.只添加了数据表中的某个字段
这里定义的是一个int类型的索引,按照DataGridView控件中的列和数据库表中的字段一一对应赋值
private void btnInquiry_Click(object sender, EventArgs e)
{
DataTable list= facade.InquiryBalance1(user);//定义DataTable类型的list接收调用外观层传回来的数据
foreach (DataRow line in list.Rows)//循环list
{
dataGridView.RowHeadersVisible = false; //隐藏行头
int index = this.dataGridView.Rows.Add();//添加空行
this.dataGridView.Rows[index].Cells[0].Value = line.ItemArray[0];//将从数据里取出的某一列赋给dataGridView中的某一列
this.dataGridView.Rows[index].Cells[1].Value = line.ItemArray[3];
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; //列宽自动适应数据的长度
dataGridView.AllowUserToAddRows = false;//不能添加行
}
}
又是不同的方法,还是那句话,适合自己的才是最好的!
还没有评论,来说两句吧...