定义学生类:

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=; i<;i++)
{
Student student = new Student();
//创建学生姓名
student.name = "student"+i;
//用随机数创建学生得分
Random rad = new Random();
System.Threading.Thread.Sleep();
student.score =Convert.ToDouble( Convert.ToDouble(rad.Next() + (0.5 * (i % ))).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 (,);
//用随机数创建学生得分
//student.score = Convert.ToDouble(rad.Next(101));
student.score = Convert.ToDouble(Convert.ToDouble(rad.Next() + (0.5 * (rad.Next(,) % ))).ToString("000.0"));
//把创建的学生姓名和得分放入学生列表集合对象
return student;
}
#endregion #region 绑定到学生列表集合(班级)到DataGridView表格控件
private void bangdingstudentOnGridView(int flag)
{
if (flag == )//标志位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[].Value = "Delete";
dr.Cells[].Value = "Add";
dr.Cells[].Value = "Update";
}
}
else if (flag == )
{
//表格清空初始化
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[].Value = "Delete";
dr.Cells[].Value = "Add";
dr.Cells[].Value = "Update";
}
}
}
#endregion private void Form1_Load(object sender, EventArgs e)
{
this.bangdingstudentOnGridView(); //取消datagridview控件的点击排序功能 第一行需特殊处理
//必须表格产生后才能使用此段代码
for (int i=;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 == && e.RowIndex >= )//实现删除功能
{
//获取选中行的数据
string strStudentName = this.dgv_Students.Rows[e.RowIndex].Cells[].Value.ToString();
foreach (Student st in studentList )
{
if(st.name.Equals(strStudentName))
{
//删除
studentList.Remove(st);
this.bangdingstudentOnGridView();
return;
}
}
//MessageBox.Show("无匹配的学生");
}
else if(e.ColumnIndex == && e.RowIndex >= )//实现添加功能
{
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();
}
else if(dr == DialogResult.Cancel)//判断点击是否是取消按钮
{ }
}
else if(e.ColumnIndex == && e.RowIndex>=)//实现修改功能
{
//获取选中行的数据
string strStudentName = this.dgv_Students.Rows[e.RowIndex].Cells[].Value.ToString();
Double douStudentScore = Convert.ToDouble(this.dgv_Students.Rows[e.RowIndex].Cells[].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();//调用表格生成方法
}
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();
}
}
}

DataGridView绑定数据、删除数据的更多相关文章

  1. net下 Mysql Linq的使用, 更新数据,增加数据,删除数据

    net下访问mysql主要有2种方法: 1.字符串拼接访问 a.mysql官网下载并安装mysql-connector-net. b项目中引用mysql.data等 所有增删改查可以通过拼接sql语句 ...

  2. MYSQL数据删除数据,物理空间没释放

    当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE TABLE 是指对表进行优化.如果已经删除了表的一大部分数据,或者如果已 ...

  3. ORACLE数据删除数据删除的解决办法

    今天主要以oracle数据库为例,介绍关于表中数据删除的解决办法.(不考虑全库备份和利用归档日志)删除表中数据有三种方法:·delete(删除一条记录)·drop或truncate删除表格中数据 1. ...

  4. DML添加数据&删除数据&修改数据

    DML:增删改表中数据 1.添加数据: 语法:insert into 表名(列名1,列名2).... values(值1,值2): 注意: 1.列名和值要一一对应. 2.如果表名后,不定义列名,则默认 ...

  5. DML添加数据-删除数据-修改数据

    DML添加数据 语法 insert into 表名(列名1,列名2,列名n) values(值1,值2,值n) 列:INSERT INTO day02(id,NAME,age) VALUES(1,&q ...

  6. 6.12---知道参数的重要性------插入数据-删除数据-修改数据注意Map

    ---------------

  7. Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  8. MVC5 + EF6 + Bootstrap3 (13) 查看详情、编辑数据、删除数据

    Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-rud.html 系列教程:MVC5 + EF6 + Boo ...

  9. Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)

    1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracl ...

  10. mysql——插入、更新、删除数据(示例)

    插入数据 一.前提,新建表: ), sname ), sage ), ssex ) ); select * from student; 二.多种方式插入数据: ','zhaolei','1990-01 ...

随机推荐

  1. SSH工具登录远程指定节点时输入用户名密码方式【我】

    通过堡垒机部署项目, 一种方式:先把补丁传到接入机,然后用CRT等命令行工具登录指定接入机,然后用SCP命令把 补丁传到 生产服务器,比如 scp -P90010 /app/backup/packet ...

  2. python 运算符和小数据池

    计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.位运算,今天我们暂只学习算数运算.比较运算.逻辑运算.赋值运算 算数运 ...

  3. 页面被iframe与无刷新更换url方法

    页面被iframe问题解决方法 if (window.top.location !== window.self.location) { const data = JSON.stringify({ if ...

  4. jQuery学习四——效果

    1.显示,隐藏: <!DOCTYPE html> <html> <head> <title>jquery事件</title> </he ...

  5. python:序列化与反序列化(json、pickle、shelve)

    本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...

  6. Docker 容器的资源限制 cgroup(九)

    目录 一.cgroup简介 二.CPU资源配额控制 1.CPU份额控制 2.CPU周期控制 3.CPU core控制 4.CPU配额控制参数的混合使用 二.对内存的限额 三.对 Block IO 的限 ...

  7. 用Python做一个简单的小游戏

    学习总是枯燥的,对于Python小白的我来讲,更是乏味的.为了提高学习的兴趣,今天我就来写一个小程序练练手. 数字猜谜游戏相信大家都不陌生,A给出最小值最大值,B写一个该范围内的数,A猜测写下的是多少 ...

  8. charles 高级批量请求

    本文参考:charles 高级批量请求 这个我感觉有点鸡肋,真正的批量请求,推荐使用JMter charles 高级批量请求就是下面这种简单的设置的 简单的使用还是可以的; 比如简单的测试下,向某一个 ...

  9. 安装Node.js教程

    前期准备 1.Node.js 简介简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node ...

  10. Codis-proxy的配置和启动

    生成配置文件,即将现有的配置文件输出到指定目录位置: ./codis-proxy --default-config | tee conf/proxy.toml 修改配置文件信息: vi conf/pr ...