定义学生类:

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. <JavaScript>constructor、prototype、__proto__和原型链

    在看了网上很多相关的文章,很多都是懵逼看完,并不是说各位前辈们写得不好,而是说实在不容易在一两次阅读中理解透.我在阅读了一些文章后,自己整理总结和绘制了一些相关的图,个人认为会更容易接受和理解,所以分 ...

  2. 判断Activty是否在前台运行

    /** * 判断某个界面是否在前台 * * @param context * @param className 某个界面名称 * */ public static boolean isActivity ...

  3. SpringBoot之封装json对象返回json数据

    /** * @description:封装json对象,所有返回结果都使用它 **/ public class Result<T> { private int code;// 业务自定义状 ...

  4. Ubuntu16.04 + cuda9.0 +cudnn7.1(转载)

    转载一个详细可用的ubuntu16.04+cuda9.0+cudnn7.1教程. 0 - 参考材料 https://blog.csdn.net/Umi_you/article/details/8026 ...

  5. [AI] 深度数学 - Bayes

    数学似宇宙,韭菜只关心其中实用的部分. scikit-learn (sklearn) 官方文档中文版 scikit-learn Machine Learning in Python 一个新颖的onli ...

  6. 我的iOS动画01

    1.嵌套使用,先变大再消失 [UIView animateWithDuration:1.25 aniamtions:^{ CGAffineTransform newTRansform = CGAffi ...

  7. delphi两个取字串长度的函数strlen,length

    ━━━━━━━━━━━━━━━━━━━━━━━━━━ [strlen]PChar 串专用函数:串长度 procedure TForm1.BitBtn1Click(Sender: TObject); v ...

  8. form 提交页面不刷新实现

    // no redirect <!DOCTYPE html> <html> <head> <meta http-equiv="Content-typ ...

  9. Jenkins占用内存较大解决办法

    主机启动jenkins后导致内存占用较大 登录主机top按键M按消耗内存排序 未调优前查看进程 修改配置文件 /usr/local/jenkins-tomcat/bin/catalina.sh 增加一 ...

  10. MATLAB分类与预测算法函数

    1.glmfit() 功能:构建一个广义线性回归模型. 使用格式:b=glmfit(X,y,distr),根据属性数据X以及每个记录对应的类别数据y构建一个线性回归模型,distr可取值为:binom ...