zoukankan      html  css  js  c++  java
  • 控件——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;   属性的顺序
    }
    }
    }

     

  • 相关阅读:
    MongoDB 基础命令 (MongoDB Shell)
    MongoDB 在 Mac OSX 平台安装
    数组根据index拆分和查询下标
    简单介绍递归算法以及应用场景
    android studio ndk开发环境搭建
    基于vue开发的多功能的时间选择器组件,开箱即用
    简单了解JS中的几种遍历
    零基础学习webpack打包管理
    让你高效的理解JavaScript中的同步、异步和事件循环
    学习flex布局(弹性布局)
  • 原文地址:https://www.cnblogs.com/yp11/p/5807515.html
Copyright © 2011-2022 走看看