博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用BindingList来实现DataGridview数据源为list时的动态增删改
阅读量:5109 次
发布时间:2019-06-13

本文共 3624 字,大约阅读时间需要 12 分钟。

当DataGridview的数据源list的时候,对list进行操作后重新绑定,数据并不会更新

使用BindingList能很好的解决这个问题(framework2.0新增)

例如,使用list时候的代码

/// <summary>
    
/// 性别类型维护
    
/// </summary>
    
public 
partial 
class 
SexFrm : Form
    
{
        
IList<SystemCode> list;
       
        
 
        
private 
void 
BindData()
        
{
            
list =
new 
SystemCodeManager().GetModelByType(type);
            
dgvSexType.DataSource = list;
        
}
 
        
private 
void 
btnAdd_Click(
object 
sender, EventArgs e)
        
{
            
SystemCode sys =
new 
SystemCode();
            
sys.CodeNo =
""
;
            
sys.EnglishName =
""
;
            
sys.ID = 12312;
            
sys.Name =
""
;
            
sys.QuickSign =
""
;
            
sys.Remark =
""
;
            
sys.Type = type;
            
list.Add(sys);
 
        
}
}

  这样的情况下,数据源改变,实际显示数据并没有改变

即时你在add的方法里重新绑定数据源

 

dgvSexType.DataSource = list;
依然如此.
在此,使用<span
class
=
"Apple-style-span" 
style=
"font-family: verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 21px; white-space: normal;"
>BindingList就可以很好的解决这个问题了.</span>
/// <summary>
    
/// 性别类型维护
    
/// </summary>
    
public 
partial 
class 
SexFrm : Form
    
{
        
int 
type = 2;
        
SystemCodeManager sysManager =
new 
SystemCodeManager();
        
BindingList<SystemCode> list;
      
 
        
private 
void 
SexFrm_Load(
object 
sender, EventArgs e)
        
{
            
new 
BaseCode.LanguageSeting().LoadLanuageSettings(
this
);
            
BindData();
        
}
 
        
private 
void 
BindData()
        
{
            
list =
new 
BindingList<SystemCode>(
new 
SystemCodeManager().GetModelByType(type));
            
dgvSexType.DataSource = list;
        
}
 
        
private 
void 
btnAdd_Click(
object 
sender, EventArgs e)
        
{
            
SystemCode sys =
new 
SystemCode();
            
sys.CodeNo =
""
;
            
sys.EnglishName =
""
;
            
sys.ID = 12312;
            
sys.Name =
""
;
            
sys.QuickSign =
""
;
            
sys.Remark =
""
;
            
sys.Type = type;
list.Add(sys);
<span
class
=
"Apple-style-span"
><br></span><span
class
=
"Apple-style-span"
>
        
}
</span>
}

  

<span style=
"font-family: verdana, Arial, Helvetica, sans-serif;"
>这样子,就可以轻松的实现和DataGridview互动了</span>
<span style=
"font-family: verdana, Arial, Helvetica, sans-serif;"
>效果如图</span>
<span style=
"font-family: verdana, Arial, Helvetica, sans-serif;"
>点击新增后可以直接新增,如果使用list,就没有任何反应</span>
 

<span style=
"font-family: verdana, Arial, Helvetica, sans-serif;"
><br></span>
<span style=
"font-family: verdana, Arial, Helvetica, sans-serif;"
>注意:BindList需要引用System.ComponentModel命名空间</span>

面向对象中集合类一般都会实现接口IbindingList, 因为 ,在绑定数据源的时候,如果数据源实现了IbindingList 那么界面可以与之实行互动。无意中发现了微软在2.0增加了一个新类,BindingList<T>,这个类从Collection<T>断承,并实现了IbindingList.

IbindingList 的魅力之处就在于他有AddNew,ApplySort,ListChangedEventHandler 等方法。而BindingSource 是控件的数据源和真正的数据源之间的桥梁,它可以调用IbindingList 的数AddNew等方法。同时IbindingList有数据发生改变的时候又会通知BindingSource从而更新界面。

MS 的 BindingList<T>还不支持sort ,search.,这是因为不知T为何东东有关系,要想实现些功能只有自己扩展了。BindingList<T>有点遗憾的是没有记下删除的数据,这与功能强大的表还是无法相比。从面向对象都已经到面向方面了,怎么在基础类中对面向对象支持还是不太完美呢。现在在研究,对象实体,集合,欢迎各位大师前来指教。

 

下面是MSDN上对BindingListr 的说明,代码示例演示如何绑定到一个包含业务对象的 BindingList 组件。

http://msdn2.microsoft.com/zh-cn/library/ms132679.aspx#Mtps_DropDownFilterTextBindingList 类可以用作创建双向数据绑定机制的基类。BindingList 提供 接口的具体泛型实现。这样就不必实现完整的 IBindingList 接口,实现完整接口可能会因 IBindingList、 和关联的  之间微妙的交互而变得比较困难。不过,典型的解决方案程序员将使用提供数据绑定功能的类(如 ),而不是直接使用 BindingList

BindingList 通过可扩展的  方法支持工厂创建的实例。(在 BindingSource 等其他类中也存在这种类型的扩展性)此外,由于此类实现  接口,因此它通过  和  方法实现新项的事务性提交或回滚。

 

 

=============================简单案例如下==============

 

class student//内部类

{
public string xm { get; set; }

public int nl { get; set; }

}
List<student> list = new List<student>();
BindingList<student> list2;
private void button3_Click(object sender, EventArgs e)
{
list = new List<student>(){
new student{xm="张三",nl=23},
new student{xm="李四",nl=23},
new student{xm="王五",nl=23}
};
list2 = new BindingList<student>(list); ;
dataGridView1.DataSource = list2;
}

private void button4_Click(object sender, EventArgs e)

{
list2.Add(new student() { xm="刘德华",nl=11});
}

转载于:https://www.cnblogs.com/efreer/p/5826720.html

你可能感兴趣的文章
湖北省软件行业协会会员单位全名录(2014年的信息)
查看>>
PAT A+B for Polynomials[简单]
查看>>
0601 Spring2.0 发布会
查看>>
EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand
查看>>
C++语言-02-函数
查看>>
jQuery5~7章笔记 和 1~3章的复习笔记
查看>>
centos7安装并配置nginx+php
查看>>
Linux下搭建DNS服务器
查看>>
(转载)PHP array_slice() 函数
查看>>
ZOOKEEPER之WATCHER简介
查看>>
[CF535D]Tavas and Malekas 题解
查看>>
cookie和localStorage、sessionStorage的区别
查看>>
关于工作流引擎授权问题的需求变更
查看>>
函数的作用域与匿名函数
查看>>
控制台输出文字颜色的方法
查看>>
百度前端学习日记14——面向对象
查看>>
关于中断处理程序的运行问题
查看>>
C#中int32 的有效值范围
查看>>
js只能输入数字和小数点
查看>>
nyoj 20 吝啬的国度
查看>>