- 创建对象类,为所有成员封装字段,然后重载该类;
- 根据已有的对象类(类型参数)创建一个长度可以变化的List数组,并绑定数据源;
- 设置dataGridView的column属性:对应四个对象类创建相应列并用Name属性进行绑定;
- button_onclick事件点击处理;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
List<Person> L1 = new List<Person>();
private List<Person> L11 = new List<Person>(); public List<Person> L111
{
get { return L11; }
set { L11 = value; }
} //internal private void Form1_Load(object sender, EventArgs e)
{ //学号,姓名,年龄,电话
L111.Add(new Person("", "王尼玛", , ""));
L111.Add(new Person("", "温尼玛", , ""));
L111.Add(new Person("", "诏尼玛", , ""));
L111.Add(new Person("", "伦尼玛", , ""));
//this.dataGridView1.DataSource = L1;
LoadData(L111); } public void LoadData(List<Person> L1)
{
this.dataGridView1.DataSource = new BindingList<Person>(L1);
}
//Add
private void button2_Click(object sender, EventArgs e)
{ Add a1 = new Add(this);
a1.Show();
} //删除
private void button4_Click(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count <= )
{
return;
}
int ind = this.dataGridView1.CurrentRow.Index;
L111.RemoveAt(ind);
LoadData(L111);
}
//退出
private void button6_Click(object sender, EventArgs e)
{
Application.Exit();
}
//修改
private void button3_Click(object sender, EventArgs e)
{
//Edit e1 = new Edit(this);
//e1.Show();
Person per = this.dataGridView1.CurrentRow.DataBoundItem as Person;
Add ad = new Add(this, per);
ad.ShowDialog();
; }
//刷新
private void button5_Click(object sender, EventArgs e)
{
LoadData(L111);
}
//查询
private void button1_Click(object sender, EventArgs e)
{ List<Person> L2 = new List<Person>();
//学号,姓名,年龄,电话
foreach (Person item in L11)
{
if(item.Name.Contains(textBox1.Text))
{
L2.Add(item);
}
}
LoadData(L2);
} private void textBox1_TextChanged(object sender, EventArgs e)
{ } }
public class Person
{
public Person() { }
public Person(string no, string name, int age, string phone) {
this.No = no;
this.Name = name;
this.Age = age;
this.Phone = phone;
}
//学号
private string no; public string No
{
get { return no; }
set { no = value; }
}
// 姓名
private string name; public string Name
{
get { return name; }
set { name = value; }
}
// 年龄
private int age; public int Age
{
get { return age; }
set { age = value; }
}
// 电话
private string phone; public string Phone
{
get { return phone; }
set { phone = value; }
}
}
public partial class Add : Form
{
public Add()
{
InitializeComponent(); }
//Add
Form1 f;
public Add(Form1 f)
{
InitializeComponent();
this.f = f;
button1.Text = "Add";
} //学号,姓名,年龄,电话 int index;
//Edit
public Add(Form1 f, Person per)
{
InitializeComponent();
this.f = f;
textBox1.Text = per.No;
textBox2.Text = per.Name;
textBox3.Text = per.Age.ToString();
textBox4.Text = per.Phone;
button1.Text = "Edit";
index = f.dataGridView1.CurrentRow.Index;
} private void button1_Click(object sender, EventArgs e)
{
//非空验证
if (textBox1.Text == string.Empty || textBox2.Text == string.Empty || textBox3.Text == string.Empty || textBox4.Text == string.Empty)
{
MessageBox.Show("亲,记得输入数据哦"); }
else
{
//验证学号是否重复
foreach (Person item in f.L111)
{
if (item.No == textBox1.Text)
{ if (button1.Text == "Edit" && item.No != textBox1.Tag.ToString().Trim() || button1.Text == "Add")
{
MessageBox.Show("学号已存在!");
return;
}
}
} //修改数据源并重新绑定到DataGridView
Person p1 = new Person(textBox1.Text.Trim(), textBox2.Text.Trim(), int.Parse(textBox3.Text.Trim()), textBox4.Text.Trim());
if (button1.Text == "Add")
{
f.L111.Add(p1);
}
else
{
f.L111[index] = p1;
textBox1.Tag = p1.No;
}
f.LoadData(f.L111); //f.LoadData(L11); }
} private void textBox4_TextChanged(object sender, EventArgs e)
{ } private void Add_Load(object sender, EventArgs e)
{ } private void textBox1_TextChanged(object sender, EventArgs e)
{ } private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}
对应的界面:
还有就是新增和修改调用的界面的都是Add。所以会看到在Add开头那里有几个重载,然后会根据不同的 button1.Text执行相对应的操作。
还有一种是用winform 对dictionary进行操作。
dataGridView数据绑定是this.dataGridView.DataSource = new BindingList<T>();
还有定义一个数组去储存某一列的值,比如下面这两句:
其他列可以用随机数随便搞定,其他的都差不多。
最后感谢一下我那个外星人同学,版权归他所有~
winform:对dataGridView绑定的泛型List<T> 的简单CRUD的更多相关文章
-
C# Winform中DataGridView绑定后DataGridViewCheckBoxColumn无法显示的问题
在控件DataGridView绑定数据源后,发现DataGridViewCheckBoxColumn不能显示当前的check值.经过一番努力,现将完整代码奉献出来,仅供参考. 错误代码: /*禁止自动 ...
-
c# winform 中DataGridView绑定List<;T>; 不能显示数据
遇到问题 DataGridView绑定List后,List更新后再次绑定不显示数据 datagridview 绑定数据源的时候 用List是不能显示修改内容的..要用binginglist<T& ...
-
WinForm DataGridView 绑定泛型List(List<;T>;)/ArrayList不显示的原因和解决
背景:无意间遇到了一个不大不小的问题,希望对一些遇到的人有所帮助! 一.问题 WinForm DataGridView 绑定泛型List (List<T>)/ArrayList不显示,UI ...
-
winform datagridview 绑定泛型集合变得不支持排序的解决方案
原文:winform datagridview 绑定泛型集合变得不支持排序的解决方案 案例: 环境:Winform程序 控件:Datagridview 现象:Datagridview控件绑定到List ...
-
[转]WinForm DataGridView 绑定泛型List(List<;T>;)/ArrayList不显示的原因和解决
背景:无意间遇到了一个不大不小的问题,希望对一些遇到的人有所帮助! 一.问题 WinForm DataGridView 绑定泛型List (List<T>)/ArrayList不显示,UI ...
-
DataGridView绑定泛型List时,利用BindingList来实现增删查改
DataGridView绑定泛型List时,利用BindingList来实现增删查改 一. DataGridView绑定泛型List的种种 1.DataGridView数据绑定对比(DataTa ...
-
[WinForm] DataGridView 绑定 DT &;&; ComboBox 列绑定 Dict
一 需求介绍 一般像枚举类型的数据,我们在数据库里存储着诸如(1.2.3.4-)或者("001"."002"."003"-)此类,但是界面 ...
-
winform中dataGridView单元格根据值设置新值,彻底解决绑定后数据类型转换的困难
// winform中dataGridView单元格在数据绑定后,数据类型更改困难,只能迂回实现.有时候需要将数字变换为不同的文字描述,就会出现int32到string类型转换的异常,借助CellFo ...
-
C# DataGridView绑定数据源的几种常见方式
开始以前,先认识一下WinForm控件数据绑定的两种形式,简单数据绑定和复杂数据绑定. 1. 简单的数据绑定 例1 using (SqlConnection conn = new SqlConnect ...
随机推荐
-
iOS开发之使用CocoaPods更新第三方出现“target overrides the `OTHER_LDFLAGS`……”问题解决方案
今天在自己的项目中用CocoaPods引入第三方SDWebImage的时候,出现了问题.当更新完毕后,在终端没太注意这个问题的提示,就直接使用SDWebImage了,在使用的时候一些方法的提示和头文件 ...
-
linux中ONBOOT=yes的含义
在/etc/sysconfig/network-scripts/ifcfg-eth0(确认ONBOOT=yes),其中eth0是设备名 ONBOOT是指明在系统启动时是否激活网卡,只有在激活状态的网卡 ...
-
关于Python的web框架
uliwebhttp://git.oschina.net/limodou/uliweb uliweb 吸取了其他框架的经验,集成了orm.总的来说一般.这个安装后有个exe文件,命令行工具.不绿色.个 ...
-
Speed-BI 多事实表与表间计算的应用:销售目标达成分析 另一种实现方法
在前一篇<Speed-BI多事实表与表间计算的应用(excel多Sheet关联分析):销售目标达成分析>http://www.powerbibbs.com/forum. ... 7583& ...
-
linux制作livecd
执行: $sudo cp /home/jxg/backup-2011.01.05/backup2011.01.05.squashfs /home/jxg/livecd/casper/filesyste ...
-
sizeof(数组)
这里就不讨论一般的数组长度计算了,只说明一下任何数据到了函数的形参中都将退化为指针,所以计算大小的时候,也是计算的指针的大小 直接上代码了 // class sizeof测试.cpp : 定义控制台应 ...
-
POJ 2209 The King(简单贪心)
The King Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7499 Accepted: 4060 Descript ...
-
Linux的vi详解
Vi简介1. Vi是一种广泛存在于各种UNIX和Linux系统中的文本编辑程序.2. Vi不是排版程序,只是一个纯粹的文本编辑程序.3. Vi是全屏幕文本编辑器,它没有菜单,只有命令.4. Vi不是基 ...
-
QSettings 类
一 .QSettings介绍: 用户通常希望应用程序记住其设置.在windows中,这些设置保存在注册表中,ios在属性文件列表中,而unix,在缺乏标准的情况下,其存储在ini文本中.QSettin ...
-
窗口置顶 - 仿TopWind
前置学习:低级鼠标hook,获得鼠标状态. 这个在原来获得鼠标状态的基础上,加上一个事件处理即可. TopWind就是一个可以置顶窗口的文件,避免复制粘贴的时候的来回切换(大窗口与小窗口),算是一个实 ...