定义学生类:

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. 分享一款颜色神器ColorSchemer Studio

    ColorSchemer Studio是一款专业配色软件,网页设计或平面设计师必备工具,和ColorPix V1.2 屏幕取色同属一个公司佳作,使用ColorSchemer Studio吸取屏幕任一色 ...

  2. 014-多线程-基础-Exchanger-行线程间的数据交换

    一.简介 Exchanger类允许在两个线程之间定义同步点,当两个线程都到达同步点时,它们交换数据.也就是第一个线程的数据进入到第二个线程中,第二线程的数据进入到第一个线程中. Exchanger可以 ...

  3. Linux -- 如何减少IO过程中的CPU copy

    四种I/O方式的对比 1. Buffered I/O read(file, tmp_buf, len); write(socket, tmp_buf, len); 上下文切换:4次 CPU copy: ...

  4. 123467123456#1#-----com.twoapp.DaDiShuGame01--前拼后广--现实打地鼠游戏jiemei

    com.twoapp.DaDiShuGame01--前拼后广--现实打地鼠游戏jiemei

  5. LeetCode_198. House Robber

    198. House Robber Easy You are a professional robber planning to rob houses along a street. Each hou ...

  6. CRISP-DM

    CRISP-DM (cross-industry standard process for data mining), 即为"跨行业数据挖掘标准流程". 此KDD过程模型于1999 ...

  7. 普罗米修斯Prometheus监控安装

    普罗米修斯Prometheus监控安装 架构: 服务端:192.168.0.204 客户端:192.168.0.206 环境准备:所有节点安装go 语言环境 rz go1.12.linux-amd64 ...

  8. Composer更新慢的终极解决方案-转

    转自:http://blog.csdn.net/fishermanmax/article/details/51975692 Packagist 镜像 请各位使用本镜像的同学注意: 本镜像已经依照 co ...

  9. LODOP打印超文本字符串拼接1 固定表格填充数值

    前面的博文:Lodop打印控件传入css样式.看是否传入正确样式.Lodop打印如何隐藏table某一列,Lodop传入的样式可以不是页面本身的css样式,传入什么打印什么,此外,数据也是,超文本打印 ...

  10. 转载【oracle切换表空间】

    http://blog.itpub.net/28939273/viewspace-1061476/ [root@yoon ~]# more /etc/oracle-releaseOracle Linu ...