控件:DataGridview    用来显示数据,      可以显示和编辑来自多种不同类型的数据源的表格数据。

一、两种显示数据的方式:手动,后台代码

主要通过后台代码:先建立三大类   然后绑定   再进行一系列的修改

可以改成中文:

默认选中一行:属性——行为——SelectionMode——FullRowSelect。      MultiSelect  ——可选中多行 。

Background(背景颜色),BorderStyle-None(无边框)。    外观——RowHeadersVisible -false(把左边的三角号去掉)

属性——外观——AlternatingRowsDefaultcellStyle(奇数的背景颜色可改动)

把上表中的  性别、民族 显示出来  怎么办?  去Info 的实体类中 扩展属性

public string sexname//扩展属性
{
get
{
return this.sex ? "男" : "女";
}
}
public string nationnane
{//扩展属性之前先要做nation的实体类 数据访问类 去封装个方法
get
{
nationDA da = new nationDA();
return da.nationname(this.Nation);

}
}

做nation的实体类 数据访问类 去封装个方法

public class nationDA
{
private SqlConnection _conn;
private SqlCommand _cmd;
private SqlDataReader _dr;
public nationDA()
{
_conn = DBConnect.conn;
_cmd = _conn.CreateCommand();

}
public string nationname(string code)
{//根据民族代号查到民族名称
string name = "汉族";
_cmd.CommandText = "select Name from Nation where Code=@code";
_cmd.Parameters.AddWithValue("@Code",code);
_conn.Open();
_dr= _cmd.ExecuteReader();
if(_dr.HasRows)
{
_dr.Read();
name=_dr[0].ToString();
}
_conn.Close();
return name;
}

结果是:

}

编辑列  进行修改:把性别 改为  sexname。   把民族  改为  nationnane。

在  编辑列  里随便加两列  分别 改为  sex  nation  并且 隐藏(Visible)

二、删除数据:

选中——属性——Dock(None)  选中要删除的数据

拖一个Button按钮   删除

点击 删除 按钮 就能把选中的删掉:1、首先取出选中项的值  2、把取出的数据删掉

private void button1_Click(object sender, EventArgs e)
{
//取出选中项的值 方法1
if (dataGridView1.SelectedCells.Count > 0)//判断取到值就显示     获取单元格的集合
{
MessageBox.Show(dataGridView1.SelectedCells[0].Value.ToString());//单元格
}
//取一行里的绑定的一个对象 方法2
Info data= dataGridView1.SelectedRows[0].DataBoundItem as Info;     获取一行的集合
MessageBox.Show(data.Name);

//删除Info数据 那就在 InfoDA里做一个 删除方法
InfoDA da = new InfoDA();
da.Delete(data.Code);//已经删掉选中的数据但是数据库显示 页面不显示
//重新指定数据源 绑定
dataGridView1.DataSource = da.select();

private void Form1_Load(object sender, EventArgs e)
{

InfoDA da = new InfoDA();
//绑定数据源 InfoDA里的方法来调用 DataSource是数据源的意思
dataGridView1.DataSource = da.select();

//取消选中第一行
dataGridView1.ClearSelection();

//用代码添加编辑列
DataGridViewColumn col = new DataGridViewColumn();//造一个对象col
col.DataPropertyName = "code";//设置它的属性
dataGridView1.Columns.Add(col);

二、修改数据

拖一个Button按钮   修改

选中一项 点击 修改 按钮后需 弹出一个新的窗口   在新的窗口进行修改

1、把修改的主键值传过去,那么先要取出主键值

2、打开修改窗体(添加一个先建项)

3、打开窗体时,要选中一条数据传过去并且显示

4、显示窗体

问题1:窗口只弹出一个(单列模式:一个类只能造一个对象出来。第一:构造方法做成private)

private static xiugai xg = null; //定义一个成员变量用来存储该类的对象
public static xiugai Newxiugai()//返回对象的方法
{
if (xg == null || xg.IsDisposed)//释放之后还能重复出来
{
xg = new xiugai();
}
return xg;
}

问题2:

//让修改窗体获得焦点(新窗体在最上层)
xg.Focus();

问题3: xg.IsDisposed//释放之后还能重复出来

5、怎么把值传来

在   打出修改窗体 时  传一个  data.code     在xiugai 页面修改一个方法

/返回对象的方法
public static xiugai Newxiugai(string code)
{

if (xg == null || xg.IsDisposed)
{
xg = new xiugai(code);
}
return xg;
}

做一下xiugai  设计页面

InfoDA里:

public Info Select(string code)
{
_cmd.CommandText = "select * from Info where Code=@code";
_cmd.Parameters.Clear();
_cmd.Parameters.AddWithValue("@code", code);
_conn.Open();
_dr = _cmd.ExecuteReader();
Info data = new Info();
if (_dr.HasRows)
{
_dr.Read();

data.Code = _dr[0].ToString();
data.Name = _dr[1].ToString();
data.Sex = Convert.ToBoolean(_dr[2]);
data.Nation = _dr[3].ToString();
data.Birthday = Convert.ToDateTime(_dr[4]);

}
_conn.Close();
return data;
}

NationDA里:

public List<Nation> Select()
{
_cmd.CommandText = "select * from Nation";
_conn.Open();
_dr = _cmd.ExecuteReader();
List<Nation> List = new List<Nation>();
if (_dr.HasRows)
{
while (_dr.Read())
{
Nation data = new Nation();
data.Code = _dr[0].ToString();
data.Name = _dr[1].ToString();
List.Add(data);
}
}
_conn.Close();
return List;

}

private void xiugai_Load(object sender, EventArgs e)
{
//先给下拉列表绑定值
NationDA nda = new NationDA();
cmbnation.DataSource = nda.Select();
cmbnation.DisplayMember = "Name";
cmbnation.ValueMember = "Code";

//对界面内容进行初始化
InfoDA da = new InfoDA();
Info data= da.Select(Code);

txtcode.Text = data.Code;
txtname.Text = data.Name;
rdnan.Checked = data.Sex;
rdnv.Checked =! data.Sex;
//给下拉列表设置选中项
cmbnation.SelectedValue = data.Nation;
txtbirthday.Text = data.Birthday.ToString("yyyy-MM-dd HH:mm:ss");

}

6、点击修改按钮  把数据库里的数据改动

private void button1_Click(object sender, EventArgs e)
{
//获取数据
string _code= txtcode.Text;
string _name = txtname.Text;
bool _sex = rdnan.Checked;
string _nation = cmbnation.SelectedValue.ToString();
DateTime _birthday =Convert.ToDateTime( txtbirthday.Text);
InfoDA ida = new InfoDA();
ida.Update(_code,_name,_sex,_nation,_birthday);
 this.Close();  关闭

}

在InfoDA 里再加一个  修改的方法

public void Update(string code, string name, bool sex, string nation, DateTime birthday)
{
_cmd.CommandText = "update Info set Name=@name,Sex=@sex,Nation=@nation,Birthday=@birthday where Code=@code";
_cmd.Parameters.Clear();
_cmd.Parameters.AddWithValue("@code",code);
_cmd.Parameters.AddWithValue("@name",name);
_cmd.Parameters.AddWithValue("@sex",sex);
_cmd.Parameters.AddWithValue("@nation",nation);
_cmd.Parameters.AddWithValue("@birthday",birthday);
_conn.Open();
_cmd.ExecuteNonQuery();
_conn.Close();
}

问题1:修改之后刷新页面

在from1里拖一个 time

1、在from1里定义一个静态成员bs

public static int bs=0;

2、

private void timer1_Tick(object sender, EventArgs e)
{

if (bs == 1)判断一下
{
InfoDA da = new InfoDA();
dataGridView1.DataSource = da.Select();
bs = 0;
}

}

3、在xiugai里面  关闭之前

//给from1的成员变量bs赋值

from1.bs=1;

三、删除加确认

MessageBoxButtons btn= MessageBoxButtons.YesNoCancel;
if (MessageBox.Show("确定要删除吗?", "删除数据", btn) == DialogResult.Yes)
{}

四、多条件查询       列如:根据name  nation查

private void button3_Click(object sender, EventArgs e)
{
//如果用户什么都不输入,或者文本框是空,是查询所有
//取数据
string name = chaname.Text;
string nation = chanation.Text;
//根据条件查询,结果交给datagirdview显示 去infoda里做一个查询方法
InfoDA da = new InfoDA();
dataGridView1.DataSource = da.select(name,nation);
}

public List<Info> select(string name, string nation)
{
//做两个恒成立的条件
string tj1 = " 1=1 ";
string tj2 = " 1=1 ";
//根据用户输入来改变条件
//如果用户输入了姓名
if (name != " ")
{
tj1 = " Name like @name ";
}
//如果用户输入了民族
if (nation != " ")
{
tj2 = " Nation =@nation ";
}
//拼接成完整条件
string ztj = " where "+tj1+" and "+tj2;
_cmd.CommandText = "select * from Info"+ztj;
_cmd.Parameters.Clear();
_cmd.Parameters.AddWithValue("@name","%"+name+"%");
_cmd.Parameters.AddWithValue("@nation",nation);
_conn.Open();
_dr = _cmd.ExecuteReader();
List<Info> list = new List<Info>();
if (_dr.HasRows)
{
while (_dr.Read())
{
Info data = new Info();
data.Code = _dr[0].ToString();
data.Name = _dr[1].ToString();
data.Sex=Convert.ToBoolean( _dr[2]);
data.Nation = _dr[3].ToString();
data.Birthday=Convert.ToDateTime( _dr[4]);
list.Add(data);
}
}
_conn.Close();
return list;
}

五、数据区别显示

dataGridView1——属性——事件——数据——DataBindingComplete(双击)

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
//将该行里绑定的数据项取出
Info data= row.DataBoundItem as Info;
//判断是不是男女
if (data.Sex)
{
//显示男 这一行是红色
row.DefaultCellStyle.BackColor = Color.Red;
//显示男 单元格是黄色
row.Cells[5].Style.BackColor = Color.Yellow;   属性的顺序
}
}
}

控件——DataGridview的更多相关文章

  1. C#: 线程间操作无效: 从不是创建控件“dataGridView”的线程访问它

    最近在修改自动化小工具,用多线程来解决后台拷贝导致WinForm界面卡死的情况,但是遇到过错:线程间操作无效: 从不是创建控件“dataGridView”的线程访问它. 这是因为在多线程程序中,新创建 ...

  2. C#窗体控件DataGridView常用设置

    在默认情况下,datagridview的显示效果: 1.禁用最后一行空白. 默认情况下,最后一行空白表示自动新增行,对于需要在控件中进行编辑,可以保留 ? 1 dataGridView1.AllowU ...

  3. 【Winform系列】Winform控件DataGridView添加数据的几种方式

    1:直接添加 在控件中设置好每列的名称 例如: DataGridViewRow row = new DataGridViewRow(); int j = dgv.Rows.Add(row); dgv. ...

  4. 【转】C#控件——DataGridView单元格文本自动换行

    源地址:https://www.cnblogs.com/wangshenhe/archive/2012/07/25/2608324.html DataGridView是.NET开发中常用的控件,在开发 ...

  5. VS2012数据绑定控件DataGridView和DataGrid

    在做Windows窗体上ADO.NET数据绑定试验的时候,发现实例中提到的一些控件在vs2012的工具箱中找不到,开始以为是工具箱中的控件太多没看到,结果重新找还是没找到,难道是因为控件升级了?yes ...

  6. WinForm 控件 DataGridView 常用操作

    1.取消列自动生成 在窗体load事件里面设置表格dataGridView的AutoGenerateColumns为 false dataGridView.AutoGenerateColumns = ...

  7. C#控件DataGridView笔记

    1.列排序问题,点击列标题行时列会自动排序导致表格混乱.解决办法: 2.改变行高 改变列头行高 ColumnHeadersHeaderSize属性设为 EnableResizing ColumnHea ...

  8. winform窗体(六)——DataGridView控件及通过此控件中实现增删改查

    DataGridView:显示数据表,通过此控件中可以实现连接数据库,实现数据的增删改查 一.后台数据绑定:    List<xxx> list = new List<xxx> ...

  9. Visual Basic 2012 借助DataGridView控件将SQL server2012 数据导入到Excel 2010

    摘  要: SQL Server 2012 数据和Excel 2010之间的连接和数据的传输,本篇文章主要针对的是SQL Server 2012 数据导入到Excel 2010文件中.Excel软件对 ...

随机推荐

  1. Django解决跨域俩方案

    方案一:一套干掉全部Primary 首先你的pip下载一个第三方库贼厉害的: pip install corsheaders 然后在项目的setting.py里面引入第三方库,如下: INSTALLE ...

  2. 洛谷P1090 合并果子【贪心】

    在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所 ...

  3. POJ3617 Best Cow Line【贪心】

    Description  给定长度为n的字符串S,要构造一个长度为n的字符串T.起初,T是空串,随后反复进行下列任意操作:  1.从S的头部删除一个字符,加到T的尾部  2.从S的尾部删除一个字符,加 ...

  4. nyoj113-字符串替换

    字符串替换 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 编写一个程序实现将字符串中的所有"you"替换成"we" 输入 输入包 ...

  5. Mysql入门详解

    目录 数据库之Mysql 一 .简单了解数据库 二.Mysql的使用 三.多表查询 数据库之Mysql 本篇文章为观看某教学视频后所作个人总结 一 .简单了解数据库 1.1常见关系型数据库 mysql ...

  6. luogu P4726 多项式指数函数(模板题FFT、多项式求逆、多项式对数函数)

    手动博客搬家: 本文发表于20181127 08:39:42, 原地址https://blog.csdn.net/suncongbo/article/details/84559818 题目链接: ht ...

  7. D2007从win7升级到win10下的莫名其妙问题。

    在win7下听说win10被推荐,于是升级到win10.结果使用d2007不能打开,出现莫名其妙的错误.把bin\bds.exe改名bds1.exe后居然可以启动了.一番折腾后,这把bds1.exe改 ...

  8. (16)Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】

    在上一节使用是配置文件的方式进行使用druid,这里在扩散下使用编程式进行使用Druid,在上一节我们新建了一个类:DruidConfiguration我在这个类进行编码: package com.k ...

  9. POJ 1129 Channel Allocation DFS 回溯

    Channel Allocation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 15546   Accepted: 78 ...

  10. 洛谷—— P2647 最大收益

    https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,……,n.你可以在这当中任意选择任意多个物品.其中第i个物 ...