海外主机测评

您现在的位置是:首页 > 数据库 > 正文

数据库

datagridview绑定datagridview绑定数据库数据同步

cds8202023-04-19数据库75
本文目录一览:1、C#Dictionary绑定datagridview2、C#datagridview控件绑定数据库,按照控件提示绑定后运行失败?3、C#中DataGridVie

本文目录一览:

  • 1、C# DictiONary绑定datagridview
  • 2、C#datagridview控件绑定数据库,按照控件提示绑定后运行失败?
  • 3、C#中DataGridView控件绑定数据源有几种方式?

C# Dictionary绑定datagridview

你诶,离胜利只差一步了哟。

跨线程错误我就不说了。

你想要的是深入绑定,即能够绑定到元素项的内部属性,甚至内部属性的内部属性。

先说一下绑定原理,不论是dgv还是BindingSource的DataSource绑定,都需要数据获取者指明DataPropertyName,这要求绑定数据源:首先继承了IEnumrableT等一系列接口,其次T包含有至少可get的属性才可使用绑定。对于你的情况,如果使用BindingSource直绑Dictionary,你的泛型T就是KeyValuePairTKey,TValue,其拥有公开的属性Key、Value、Count等等,此时数据获取者要填写的DataPropertyName可以是“Key”,“Value”,“Count”等等。

当然我们的需求是花样百出的,还是以你的情况为例,难免会出现Value和Key是自己定义的类型,此时如果不改DataPropertyName,你得到的只会是该类型的名称字符串。想要绑定到自定义类型的内部甚至更内部,有至少二种办法:

一、继承系统的BindingSource,overide及新增一些方法,可以让你在使用MyBindingSource mbs=new MyBindingSource(...)时直接指明你需要绑定的内部元素。这个过程开销很小但是编写有一定难度,需要在BindingSource内部重新维护一个合适你需要的绑定元素列表,并且需要处理绑定属性名的问题。此技术在大型项目中比较多用,好处是一次改完哪里都能用,而且可以支持双向绑定,允许反向编辑真实的数据源。有兴趣的话可以PM我我写个简单的给你。

二、修改提供给BindingSource或者dgv.DataSouce的数据源,也就是直接抽取内部属性出来构建一个新的绑定数据源。比较适合针对某个特定表的绑定,也是最容易实现的。当然,因为你是新构建了用于显示的数据源,只能支持单向绑定咯。

假定你的InnerClass是这样写的:

public class MyData

    {

        public string C1 { get; set; }

        public string C2 { get; set; }

        public string C3 { get; set; }

    }

如果需要用两列分别绑定Dictionarystring,MyData dic的Key和MyData.C1,一行搞定:

dataGridView1.DataSource=(from i in dic select new{i.Key,i.MyData.C1}).ToList();

本质上就是遍历字典,把每一个键值对的Key和Value.C1都抽出来做成新字典然后转列表。

如果不熟悉Linq,也可以自己写一个抽取数据的小方法每次绑定前转换下。

嗯,刚才我同事也给了个很中二的办法:重写dataGridView。通过重写绑定相关的方法,可以让DataGridView能够识别形如"Value.C1"甚至“Value.C1.Length"这样的DataProperyName并且在绑定事件中能够通过反射查找Value内部是否存在C1属性,如果该属性存在则将其呈现。

这个可以一试,目测难度较大。

和同事小聊了下我又想起一个另类的办法- -|

我们知道不管你绑的是什么值,想在界面上看到都有一个转换过程。这里DataGridView描绘每个含绑定的单元格时都会把对应的数据源中的绑定元素的ToString()值拿来呈现。如果你只有一列需要绑定到InnerClass的C1属性,我们可以这样取巧:

首先dgv里的两列的DataPropertyName仍然写的是”Key“和"Value”,这样第二列绑到的是一个InnerClass对象,只不过其显示出来的ToString()是形如“MyNamespace.InnerClass”这样的类名字符串,如果我们重写InnerClass的ToString()方法呢?测试完发现一切OK。也只需要在InnerClass里加一句:

public override string ToString()

        {

            return C1;

        }

以上四种方案你挑着用吧。我相信如果你愿意投一点时间多从其他角度看问题的话,你会找到更多解决方案的。为了生活有时我们不得不只抓效率抓进度,但闲暇时做点小研究其实也是挺惬意的一个事情,并非是得不偿失~

还有什么问题可PM我。

C#datagridview控件绑定数据库,按照控件提示绑定后运行失败?

用户 'sa' 登录失败 表示你的密码不对

你先在SSMS中使用数据库连接字符串的连接方式测试

能登陆成功后再把正确的连接字符串写在配置文件中使用

C#中DataGridView控件绑定数据源有几种方式?

第一种:\x0d\x0aDataSet ds=new DataSet (); \x0d\x0athis.dataGridView1.DataSource=ds.Table[0]; \x0d\x0a\x0d\x0a第二种:\x0d\x0aDataTable dt=new DataTable(); \x0d\x0athis.dataGridView1.DataSource=dt; \x0d\x0a \x0d\x0a第三种:\x0d\x0aDataSet ds=new DataSet (); \x0d\x0athis.dataGridView1.DataSource = ds.Tables["表名"]; \x0d\x0a \x0d\x0a第四种:\x0d\x0aDataSet ds=new DataSet (); \x0d\x0athis.dataGridView1.DataSource = ds; \x0d\x0athis.dataGridView1.DataMember = "表名";\x0d\x0a \x0d\x0a第五种:\x0d\x0aArrayList Al = new ArrayList();\x0d\x0athis.dataGridView1.DataSource = Al; \x0d\x0a \x0d\x0a第六种:\x0d\x0aDictionary dic = new Dictionary(); \x0d\x0athis.dataGridView1.DataSource = dic; \x0d\x0a \x0d\x0a第七种:\x0d\x0aDataView dv = new DataView();\x0d\x0athis.dataGridView1.DataSource = dv;\x0d\x0a \x0d\x0a第八种:\x0d\x0athis.dataGridVi.DataSource = new BindingList(List);\x0d\x0a \x0d\x0a就知道这么多了,有些都搞忘了,应该还有很多。

datagridview绑定的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于datagridview绑定数据库数据同步、datagridview绑定的信息别忘了在本站进行查找喔。

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~