DataGridView绑定数据、删除数据

定义学生类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GridViewDemo
{
    public class Student
    {
        //姓名字段
        private string Name;
        //姓名属性
        public string name
        {
            get
            {
                return Name;
            }
            set
            {
                Name = value;
            }
        }
        //得分字段
        private double Score;
        //得分属性
        public double score
        {
            get
            {
                return Score;
            }
            set
            {
                Score = value;
            }
        }
    }
}

 

form1代码实现:

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;
using Microsoft.VisualBasic;

namespace GridViewDemo
{
    public partial class Form1 : Form
    {
        //定义全局对象
        public static List<Student> studentList = new List<Student>();//用于form1和form2传值的第二种方法
        DataTable dt = new DataTable();
        public Student studentOne = new Student();

        public Form1()
        {
            InitializeComponent();
        }

        #region 创建集合类实现建立并存放20个学生的方法,类似于创建班级类。
        private List<Student> GeneraStudent()
        {
            List<Student> banji = new List<Student>() ;
            //用循环真正去创建20个学生
            for (int i=1; i<16;i++)
            {
                Student student = new Student();
                //创建学生姓名
                student.name = "student"+i;
                //用随机数创建学生得分
                Random rad = new Random();
                System.Threading.Thread.Sleep(100);
                student.score =Convert.ToDouble( Convert.ToDouble(rad.Next(101) + (0.5 * (i % 2))).ToString("000.0"));
                //把创建的学生姓名和得分放入学生列表集合对象
                banji.Add(student);
            }
            //返回方法生成的20个学生列表集合
            return banji;
        }

        private Student GeneraOneStudent()
        {
            Student student = new Student();
            Random rad = new Random();
            //创建学生姓名
            student.name = "student_add" + rad.Next (1,100);
            //用随机数创建学生得分            
            //student.score = Convert.ToDouble(rad.Next(101));
            student.score = Convert.ToDouble(Convert.ToDouble(rad.Next(101) + (0.5 * (rad.Next(0,10) % 2))).ToString("000.0"));
            //把创建的学生姓名和得分放入学生列表集合对象
            return student;
        }
        #endregion

        #region 绑定到学生列表集合(班级)到DataGridView表格控件
        private void bangdingstudentOnGridView(int flag)
        {
            if (flag == 0)//标志位0表示首次绑定控件
            {
            //表格清空初始化
            this.dgv_Students.Rows.Clear();
            this.dgv_Students.Columns.Clear();

            //实例化表格
            dt = new DataTable();

            //实例化每列 并初始化列名称和列数据类型
            DataColumn dc = new DataColumn();
            dc.ColumnName = "Name";
            dt.Columns.Add(dc);

            DataColumn dcvalue = new DataColumn();
            dcvalue.ColumnName = "Score";
            dt.Columns.Add(dcvalue);

            //调用创建学生方法,创建20个学生。
            studentList = this.GeneraStudent();
            //把创建的20个学生用循环方法加载到每行
            foreach (Student student in studentList )
            {
                //实例化表格行 并加载创建出的学生信息
                DataRow dr = dt.NewRow();
                dr["Name"] = student.name;
                dr["Score"] = student.score;
                dt.Rows.Add(dr);
            }
            //把数据绑定到表格控件数据源
            this.dgv_Students.DataSource = dt;
                
            DataGridViewLinkColumn dlc = new DataGridViewLinkColumn();
            dlc.Name = "Delete";
            dlc.Text = "Delete";
            this.dgv_Students.Columns.AddRange(new DataGridViewColumn[] { dlc });

            DataGridViewButtonColumn adc = new DataGridViewButtonColumn();
            adc.Name = "Add";
            adc.Text = "Add";
            this.dgv_Students.Columns.AddRange(new DataGridViewColumn[] { adc });

            DataGridViewButtonColumn udc = new DataGridViewButtonColumn();
            udc.Name = "Update";
            udc.Text = "Update";
            this.dgv_Students.Columns.AddRange(new DataGridViewColumn[] { udc });

            foreach (DataGridViewRow dr in this.dgv_Students.Rows)
              {
                 dr.Cells[2].Value = "Delete";
                 dr.Cells[3].Value = "Add";
                 dr.Cells[4].Value = "Update";
               }
            }
            else if (flag == 1)
            {
                //表格清空初始化
                dt.Rows.Clear();
                                
                //把创建的学生用循环方法加载到每行
                foreach (Student student in studentList)
                {
                    //实例化表格行 并加载创建出的学生信息
                    DataRow dr = dt.NewRow();
                    dr["Name"] = student.name;
                    dr["Score"] = student.score;
                    dt.Rows.Add(dr);
                }
                //把数据绑定到表格控件数据源
                this.dgv_Students.DataSource = dt;

                foreach (DataGridViewRow dr in this.dgv_Students.Rows)
                {
                    dr.Cells[2].Value = "Delete";
                    dr.Cells[3].Value = "Add";
                    dr.Cells[4].Value = "Update";
                }
            }
        }
        #endregion


        private void Form1_Load(object sender, EventArgs e)
        {
            this.bangdingstudentOnGridView(0);

            //取消datagridview控件的点击排序功能 第一行需特殊处理
            //必须表格产生后才能使用此段代码
            for (int i=0;i < this.dgv_Students.Columns.Count; i++)
            {
                this.dgv_Students.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
                //this.dgv_Students.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            }
        }

        private void dgv_Students_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex  == 2 && e.RowIndex >= 0)//实现删除功能
            {
                //获取选中行的数据
                string strStudentName = this.dgv_Students.Rows[e.RowIndex].Cells[0].Value.ToString();
                foreach (Student st in studentList )
                {
                    if(st.name.Equals(strStudentName))
                    {
                        //删除
                        studentList.Remove(st);
                        this.bangdingstudentOnGridView(1);
                        return;
                    }                    
                }
                //MessageBox.Show("无匹配的学生");
            }
            else if(e.ColumnIndex == 3 && e.RowIndex >= 0)//实现添加功能
            {
                Form2 f2 = new Form2();//实例化弹出窗口form2对象
                DialogResult dr = f2.ShowDialog(this.Owner);//实现form2窗口弹出方法,并指定父窗体
                if (dr == DialogResult.OK)//判断点击是否是确定按钮
                {
                    //第一种传值方式 通过定义类的static类型对象
                    //this.bangdingstudentOnGridView(1);

                    //第二种传值方式 通过定义类的public对象以及相关的字段和属性
                    this.studentOne = f2.student;
                    studentList.Add(this.studentOne);
                    this.bangdingstudentOnGridView(1);
                }
                else if(dr == DialogResult.Cancel)//判断点击是否是取消按钮
                {

                }
            }
            else if(e.ColumnIndex == 4 && e.RowIndex>=0)//实现修改功能
            {
                //获取选中行的数据
                string strStudentName = this.dgv_Students.Rows[e.RowIndex].Cells[0].Value.ToString();
                Double douStudentScore = Convert.ToDouble(this.dgv_Students.Rows[e.RowIndex].Cells[1].Value.ToString());

                Form2 f2 = new Form2(strStudentName, douStudentScore);
                DialogResult dr = f2.ShowDialog(this.Owner);
                if (dr == DialogResult.OK)//判断点击是否是确定按钮
                {
                    this.studentOne = f2.student;//弹窗form2中输入的值传给form1对象
                    //在对象列表中定位获取的学生名,找到后更改相关值,并跳出循环
                    foreach (Student st in studentList)
                    {
                        if(st.name==strStudentName )
                        {
                            st.name = this.studentOne.name;
                            st.score = this.studentOne.score;
                            break;
                        }
                    }
                    this.bangdingstudentOnGridView(1);//调用表格生成方法
                }
                else if (dr == DialogResult.Cancel)//判断点击是否是取消按钮
                {

                }
            }
        }
    }
}

 

弹窗form2代码实现:

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;
using static System.Resources.ResXFileRef;

namespace GridViewDemo
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        //定义带参数的构造函数用于传值
        public Form2 (string name,double score)
        {
            InitializeComponent();
            this.txt_name.Text = name;
            this.nud_score.Value = (decimal)score;
        }

        //定义字段属性 用于传值第二种方法
        public Student Student;
        public Student student
        {
            get;
            set;
        }

        private void bt_ok_Click(object sender, EventArgs e)
        {
            //第一种传值方式 通过定义类的static类型对象
            //Student st = new Student();
            //st.name = this.txt_name.Text.Trim();
            //st.score = Convert.ToDouble(this.nud_score.Value.ToString("0.0"));
            //Form1.studentList.Add(st);
            //this.Close();

            //第二种传值方式 通过定义类的public对象以及相关的字段和属性
            //Student studnet = new Student();
            student = new Student();
            student.name = this.txt_name.Text.Trim();//获取form2窗口控件输入的值并给属性赋值
            student.score = Convert.ToDouble(this.nud_score.Value.ToString("0.0"));//获取form2窗口控件输入的值并给属性赋值
            this.Close();
        }
    }
}

 

转载于:https://www.cnblogs.com/palebluestarrysky/p/11192533.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值