• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

DataGrid 太难用了!

wugamp 2016-12-07 04:39:12
首先,C# 和 WPF 里都有 DataGrid,其实两者有差异。有时找到的资料其实是 C# 的,我这种菜鸟只能忍痛放弃了。
我要显示几十组数据,每组2到3个数。最理想的办法是每行一组,可以编辑、增加或者删除。
但我并不想和数据库绑定在一起。我还是希望在我自己程序里有个类似数组的东西存放数据。
我现在找到的资料中,对 DataGrid 的 ItemSource 如何绑定,都语焉不详。就算有的资料提了一点,感觉也是绑定在数据库里的,不满足我要求。
还有的就是关于付费的第三方控件,这个我更没法用了。
哪位能告诉我 DataGrid 是不是非要绑到数据库上?如果不是,具体怎么绑定?
谢谢
...全文
239 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wugamp 2016-12-09
引用 7 楼 wugamp 的回复:
[quote=引用 3 楼 duanzi_peng 的回复:] 不是必须需要绑定。 例如在后台指定 : grid1.ItemsSource = 任何一个实现IEnumerable接口的集合。
现在遇到个新麻烦,我是这样写的: ObservableCollection<C_STEPS> g_obs = new ObservableCollection<C_STEPS>(); dataGrid1.ItemsSource = g_obs; 我发现:当我往 g_obs 里 ADD 新项的时候,dataGrid 上有反应。 但是 ,如果我修改 g_obs 里某一项 的值,dataGrid 就没反应。 比如说 C_STEPS 有两个字段。我改变了其中一个字段的值,但是 dataGrid 里对应的 cell 里并没有变化。 [/quote] 用一个笨办法解决了:重新设定 itemssource.
引用 8 楼 duanzi_peng 的回复:
[quote=引用 7 楼 wugamp 的回复:] [quote=引用 3 楼 duanzi_peng 的回复:] 不是必须需要绑定。 例如在后台指定 : grid1.ItemsSource = 任何一个实现IEnumerable接口的集合。
现在遇到个新麻烦,我是这样写的: ObservableCollection<C_STEPS> g_obs = new ObservableCollection<C_STEPS>(); dataGrid1.ItemsSource = g_obs; 我发现:当我往 g_obs 里 ADD 新项的时候,dataGrid 上有反应。 但是 ,如果我修改 g_obs 里某一项 的值,dataGrid 就没反应。 比如说 C_STEPS 有两个字段。我改变了其中一个字段的值,但是 dataGrid 里对应的 cell 里并没有变化。 [/quote] 不要用后台赋值方式 ,使用Binding方式,并且C_STEPS 要实现INotifyPropertyChanged接口。关键字 不懂的 可以去网上搜解释。[/quote] 你说的 “binding方式” 就是在xaml 里写吗?
回复
exception92 2016-12-09
引用 7 楼 wugamp 的回复:
[quote=引用 3 楼 duanzi_peng 的回复:] 不是必须需要绑定。 例如在后台指定 : grid1.ItemsSource = 任何一个实现IEnumerable接口的集合。
现在遇到个新麻烦,我是这样写的: ObservableCollection<C_STEPS> g_obs = new ObservableCollection<C_STEPS>(); dataGrid1.ItemsSource = g_obs; 我发现:当我往 g_obs 里 ADD 新项的时候,dataGrid 上有反应。 但是 ,如果我修改 g_obs 里某一项 的值,dataGrid 就没反应。 比如说 C_STEPS 有两个字段。我改变了其中一个字段的值,但是 dataGrid 里对应的 cell 里并没有变化。 [/quote] 不要用后台赋值方式 ,使用Binding方式,并且C_STEPS 要实现INotifyPropertyChanged接口。关键字 不懂的 可以去网上搜解释。
回复
wugamp 2016-12-08
引用 5 楼 wugamp 的回复:
[quote=引用 2 楼 Libby1984 的回复:] 用ItemSource 很方便,不需要一定要绑定到数据库,你可以自己构造一个list,包含自己的数据,然后将list中的实例属性绑定到特定的列就可以了。比如你有一个类A,有a,b,c三个属性 class A { public string a {get;set;} public string b {get;set;} public string c {get;set;} } r然后自己构造一个list(不通过数据库) List<A> list = new List<A>(); ......数据自己添加 然后将list 赋值给ItemSource ,并将a,b,c绑定到对应的列(不显示的可以不绑定)
多谢指点,用此办法已经成功地让 DataGrid 显示了。请问如何在中间加一行呢?我是希望用户在数据中间能插入一行,但是现在只能在最末尾用回车键增加一行。 [/quote] 我现在是在鼠标双击事件中,根据 seletedIndex 确定点击位置,再在数据中插入空白行。有更简洁的办法吗?
回复
wugamp 2016-12-08
引用 2 楼 Libby1984 的回复:
用ItemSource 很方便,不需要一定要绑定到数据库,你可以自己构造一个list,包含自己的数据,然后将list中的实例属性绑定到特定的列就可以了。比如你有一个类A,有a,b,c三个属性 class A { public string a {get;set;} public string b {get;set;} public string c {get;set;} } r然后自己构造一个list(不通过数据库) List<A> list = new List<A>(); ......数据自己添加 然后将list 赋值给ItemSource ,并将a,b,c绑定到对应的列(不显示的可以不绑定)
多谢指点,用此办法已经成功地让 DataGrid 显示了。请问如何在中间加一行呢?我是希望用户在数据中间能插入一行,但是现在只能在最末尾用回车键增加一行。
回复
exception92 2016-12-08
我还是希望在我自己程序里有个类似数组的东西存放数据 -》 其实不是DataGrid难用,而是你不清楚需求中的数据结构如何去设计。
回复
exception92 2016-12-08
不是必须需要绑定。 例如在后台指定 : grid1.ItemsSource = 任何一个实现IEnumerable接口的集合。
回复
wugamp 2016-12-08
引用 3 楼 duanzi_peng 的回复:
不是必须需要绑定。 例如在后台指定 : grid1.ItemsSource = 任何一个实现IEnumerable接口的集合。
现在遇到个新麻烦,我是这样写的: ObservableCollection<C_STEPS> g_obs = new ObservableCollection<C_STEPS>(); dataGrid1.ItemsSource = g_obs; 我发现:当我往 g_obs 里 ADD 新项的时候,dataGrid 上有反应。 但是 ,如果我修改 g_obs 里某一项 的值,dataGrid 就没反应。 比如说 C_STEPS 有两个字段。我改变了其中一个字段的值,但是 dataGrid 里对应的 cell 里并没有变化。
回复
用ItemSource 很方便,不需要一定要绑定到数据库,你可以自己构造一个list,包含自己的数据,然后将list中的实例属性绑定到特定的列就可以了。比如你有一个类A,有a,b,c三个属性 class A { public string a {get;set;} public string b {get;set;} public string c {get;set;} } r然后自己构造一个list(不通过数据库) List<A> list = new List<A>(); ......数据自己添加 然后将list 赋值给ItemSource ,并将a,b,c绑定到对应的列(不显示的可以不绑定)
回复
不用绑定到数据库啊。不过WPF里面一般用的是ListView,DataGrid是winform控件吧。
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2016-12-07 04:39
社区公告

让您成为最强悍的C#开发者