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=; 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绑定数据、删除数据的更多相关文章
- net下 Mysql Linq的使用, 更新数据,增加数据,删除数据
net下访问mysql主要有2种方法: 1.字符串拼接访问 a.mysql官网下载并安装mysql-connector-net. b项目中引用mysql.data等 所有增删改查可以通过拼接sql语句 ...
- MYSQL数据删除数据,物理空间没释放
当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE TABLE 是指对表进行优化.如果已经删除了表的一大部分数据,或者如果已 ...
- ORACLE数据删除数据删除的解决办法
今天主要以oracle数据库为例,介绍关于表中数据删除的解决办法.(不考虑全库备份和利用归档日志)删除表中数据有三种方法:·delete(删除一条记录)·drop或truncate删除表格中数据 1. ...
- DML添加数据&删除数据&修改数据
DML:增删改表中数据 1.添加数据: 语法:insert into 表名(列名1,列名2).... values(值1,值2): 注意: 1.列名和值要一一对应. 2.如果表名后,不定义列名,则默认 ...
- DML添加数据-删除数据-修改数据
DML添加数据 语法 insert into 表名(列名1,列名2,列名n) values(值1,值2,值n) 列:INSERT INTO day02(id,NAME,age) VALUES(1,&q ...
- 6.12---知道参数的重要性------插入数据-删除数据-修改数据注意Map
---------------
- Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据
系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...
- MVC5 + EF6 + Bootstrap3 (13) 查看详情、编辑数据、删除数据
Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-rud.html 系列教程:MVC5 + EF6 + Boo ...
- Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)
1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracl ...
- mysql——插入、更新、删除数据(示例)
插入数据 一.前提,新建表: ), sname ), sage ), ssex ) ); select * from student; 二.多种方式插入数据: ','zhaolei','1990-01 ...
随机推荐
- Android插件化(五):OpenAtlasの四大组件的Hack
Android插件化(五):OpenAtlasの四大组件的Hack 转 https://www.300168.com/yidong/show-2776.html 核心提示:引言到目前为止,我们已经 ...
- Centos7安装zabbix3.4.0以及配置和使用
一.安装ZABBIX 1.环境和软件版本 注:此次是采用的rpm包方式安装,所以服务器必须要能连接互联网通过yum方式解决依赖关系 ①系统: [root@zabbix ~]# cat /etc/red ...
- delphi ADOQUery中错误解决方法"无法为更新定位行。一些值可能已在最后...
使用delphi中的ADOQuery控件中自带的,insert ,edit,delete此操作时,有时会出现下面的错误提示,提示错误信息:"无法为更新定位行.一些值可能已在最后一次读取后已更 ...
- UI界面测试
概念:指测试用户界面的风格是否满足用户要求.文字是否正确.页面是否美观.文字与图片组合是否完美.操作是否友好等. 1.窗体测试 { 窗体大小. 移动窗体. 缩放窗体. 显示分辨率. 状态栏. 工具栏. ...
- linux中安装docker
uname -r yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ ...
- spring mvc 后端获得前端传递过来的参数的方法
1.通过HttpServletRequest 获得 HttpServletRequest.getParameter(参数名),可以获得form表单中传递的参数,或ajax或url中传递过来的参数,如果 ...
- (转)华为 安卓手机在MAC系统下 ADB 识别
使用MACOS发现在Android开发环境完整的情况下,接入小米,SAMSUNG,HTC,ZTE等手机都可以自动识别,如果暂时不能识别,只需要在 adb_usb.ini 中设置之后也可以识别,并可以在 ...
- Python sys.path永久添加
在用户目录下,找到隐藏文件.bashrc 或 .zshrc 文件然后在末尾添加 export PYTHONPATH=$PYTHONPATH:/home/dev/custom_path 操作:vim . ...
- 华为eNSP上的NAT地址转换配置
NAT是将IP数据报文报头中的IP地址转换为另一个IP地址的过程,主要用于实现内部网络(私有IP地址)访问外部网络(公有IP地址)的功能. 1.实验拓扑 地址表: 1.完成各个接口基本配置之后使用pi ...
- rebbitMQ的实现原理
引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题.消息服务擅 ...