定义学生类:

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. 相关 Excel 开源类库性能对比

    性能数据 · Excelize 中文文档https://xuri.me/excelize/zh-hans/performance.html Golang library for reading and ...

  2. JS pc端和移动端共同实现复制到剪贴板功能实现

    JS pc端和移动端实现复制到剪贴板功能实现 在网页上复制文本到剪切板,一般是使用JS+Flash结合的方法,网上有很多相关文章介绍.随着 HTML5 技术的发展,Flash 已经在很多场合不适用了, ...

  3. sqlalchemy连接 MySQL(转)

    from sqlalchemy import create_engine,Table,Column,Integer,String,MetaData,ForeignKey engine=create_e ...

  4. LeetCode_28. Implement strStr()

    28. Implement strStr() Easy Implement strStr(). Return the index of the first occurrence of needle i ...

  5. Sybase数据库网页数据维护工具

    Sybase是优秀的数据库产品,在银行,政务等行业广泛使用, 现在TreeSoft数据库管理系统已支持Sybase了,直接在浏览器中就可以操作查看Sybase数据了,十分方便.        Tree ...

  6. Flutter状态管理Provider,简单上手

    在之前的文章中介绍了 Google 官方仓库下的一个状态管理 Provide.乍一看这俩玩意可能很容易就被认为是同一个东西,仔细一看,这不就差了一个字吗,有什么区别呢. 首先,你要知道的最大的一个区别 ...

  7. 第一篇博客==>Hello_World

    1,为什么写博客? 大佬都说程序员需要写博客的说,被无数到的大佬帮我洗脑之后,慢慢也发现了写博客的好处,写博客我认为主要有以下几个作用: 1.打开博客,记录世界记录你.emmm 2.可以把自己的一些经 ...

  8. SpringBoot(三)手写starter pom自动配置

    思想:主要是EnableAutoConfiguration在启动的时候会扫描spring.factories并加载 1在resource下面新建META-INF/spring.factories 2在 ...

  9. 剑指offer60:把二叉树打印成多行。上到下按层打印二叉树。

    1 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 2 思路和方法 vector变量存储每一层的元素vector<vector<int> > ans ...

  10. LC 3. Longest Substring Without Repeating Characters

    题目描述 Given a string, find the length of the longest substring without repeating characters. Example ...