控件——DataGridview
控件: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的更多相关文章
- C#: 线程间操作无效: 从不是创建控件“dataGridView”的线程访问它
		
最近在修改自动化小工具,用多线程来解决后台拷贝导致WinForm界面卡死的情况,但是遇到过错:线程间操作无效: 从不是创建控件“dataGridView”的线程访问它. 这是因为在多线程程序中,新创建 ...
 - C#窗体控件DataGridView常用设置
		
在默认情况下,datagridview的显示效果: 1.禁用最后一行空白. 默认情况下,最后一行空白表示自动新增行,对于需要在控件中进行编辑,可以保留 ? 1 dataGridView1.AllowU ...
 - 【Winform系列】Winform控件DataGridView添加数据的几种方式
		
1:直接添加 在控件中设置好每列的名称 例如: DataGridViewRow row = new DataGridViewRow(); int j = dgv.Rows.Add(row); dgv. ...
 - 【转】C#控件——DataGridView单元格文本自动换行
		
源地址:https://www.cnblogs.com/wangshenhe/archive/2012/07/25/2608324.html DataGridView是.NET开发中常用的控件,在开发 ...
 - VS2012数据绑定控件DataGridView和DataGrid
		
在做Windows窗体上ADO.NET数据绑定试验的时候,发现实例中提到的一些控件在vs2012的工具箱中找不到,开始以为是工具箱中的控件太多没看到,结果重新找还是没找到,难道是因为控件升级了?yes ...
 - WinForm 控件 DataGridView 常用操作
		
1.取消列自动生成 在窗体load事件里面设置表格dataGridView的AutoGenerateColumns为 false dataGridView.AutoGenerateColumns = ...
 - C#控件DataGridView笔记
		
1.列排序问题,点击列标题行时列会自动排序导致表格混乱.解决办法: 2.改变行高 改变列头行高 ColumnHeadersHeaderSize属性设为 EnableResizing ColumnHea ...
 - winform窗体(六)——DataGridView控件及通过此控件中实现增删改查
		
DataGridView:显示数据表,通过此控件中可以实现连接数据库,实现数据的增删改查 一.后台数据绑定: List<xxx> list = new List<xxx> ...
 - Visual Basic 2012 借助DataGridView控件将SQL server2012 数据导入到Excel 2010
		
摘 要: SQL Server 2012 数据和Excel 2010之间的连接和数据的传输,本篇文章主要针对的是SQL Server 2012 数据导入到Excel 2010文件中.Excel软件对 ...
 
随机推荐
- SQL 分组
 - Fedora Atomic Host 使用中的几个坑
			
做成U盘启动:必须用配套工具写U盘,否则安装时各种timeout Cockpit中文页面会导致登录后页面空白的bug,解决办法是更改浏览器首选语言 没有yum,无法下载网页浏览器w3m,Pydio c ...
 - efcore 控制台迁移架构
			
添加 nuget 包: Microsoft.EntityFrameworkCore.Design Microsoft.EntityFrameworkCore.SqlServer Microsoft.E ...
 - BZOJ 3319: 黑白树 树+并查集+未调完+神题
			
Code: #include<bits/stdc++.h> #define maxn 1000003 using namespace std; char *p1,*p2,buf[10000 ...
 - CF1168B Good Triple  性质分析_好题
			
题意翻译 给出01串s,求数对[l,r]个数,使得能找到至少一对[x,k],使1<=x,k<=|s|且l<=x<x+2k<=r且s[x]=s[x+k]=s[x+2k] 题 ...
 - vue小白学习笔记
			
<div id="div"> <h2>{{ key }}</h2> </div> new Vue ({ el : "#di ...
 - 一张图搞懂javascript原型链
			
js高级里面原型链对于新手来说并不友好,总的来说就是 任何函数都有自己的原型对象(prototype),任何实例对象都__proto__指向构造函数的原型 先来个最简单的原型三角关系 var fn = ...
 - js声明变量作用域会提前
			
var s = 1; function test() { console.info(s); var s = 2; console.info(s); } test(); >>>unde ...
 - 基于Homestead搭建PHP项目开发环境(适合Zend Framework,Laravel,Yii,thinkphp等)
			
参考: https://framework.zend.com/bl...参考: https://laravel.com/docs/5.5/... 第一步:软件的下载和安装 软件1:VirtualBox ...
 - 阿里云 LAMP 使用基础
			
产品亮点 1.基于阿里云CentOS7.2镜像 2.采用yum方式安装,软件安装均为默认目录,未作任何修改. 3.采用经典LAMP组合,拓展性强,资源丰富,解决方案较多 4.附带PhpMyadmin和 ...