开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 3885|回复: 4

求助:gridview里面列设置为check后,为何表相应列的值不改变

[复制链接]

0

精华

6

贡献

4

赞扬

帖子
15
软币
193
在线时间
28 小时
注册时间
2014-1-12
发表于 2014-1-16 20:38:37 | 显示全部楼层 |阅读模式
本帖最后由 飘啊飘 于 2014-1-17 12:56 编辑

我用的版本是13.2


经过长时间测试
求助内容变更为 工具栏中的按钮无法正确获取到gridview中被更改的datatable列的值,具体内容见3楼

UserTable表里面包含”Selected“这一列
然后绑定数据源
gridControl.DataSource = UserTable;
表格相应列的Field字段也设置成了”Selected“
不管是将列设置手动成checkedit,将UserTable里面的Selected设置成int或bool,而且也按照selected字段的属性设置相应的ValueChecked和ValueUnchecked的值
还是将Selected设置成bool让gridview自动读取为check列
但是为什么勾选复选框都不能改变UserTable中Selected对应row的值
全部勾选后
foreach(datarow i in usertable.rows)
{
console.writeline(i["selected"].tostring());
}
得到的值还是原始的值,是不是还有什么地方没设置的?
1.jpg
2.jpg
3.jpg

回复

使用道具 举报

0

精华

174

贡献

985

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
195
软币
4374
在线时间
369 小时
注册时间
2013-6-7
发表于 2014-1-17 11:30:09 | 显示全部楼层
也许是因为你直接绑定的DataTable原因. 请改用 BindingSource 来绑定.
BindingSource bds = new BindingSource();
bds.DataSource = UserTable;
gridControl.DataSource = bds;
你试试看是不是就能够改变基础数据源了 ?
回复

使用道具 举报

0

精华

6

贡献

4

赞扬

帖子
15
软币
193
在线时间
28 小时
注册时间
2014-1-12
 楼主| 发表于 2014-1-17 12:47:37 | 显示全部楼层
nyfor 发表于 2014-1-17 11:30
也许是因为你直接绑定的DataTable原因. 请改用 BindingSource 来绑定.
BindingSource bds = new BindingSou ...

虽然无效,但是谢谢楼上。
经过几个小时的折腾发现,在windows的ToolStrip和Dev的barManager里面的按钮好像都不能正确获取被改变的值,以下是简单测试代码,用console输出各行各列的值,然后用select方法查找selected列为1的行


  1. <p>        private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  2.         {
  3.             int n = 1;
  4.             foreach (DataRow i in UserTable.Rows)
  5.             {
  6.                 Console.WriteLine("\r\n第 {0} 行", n);
  7.                 foreach (DataColumn a in UserTable.Columns)
  8.                 {
  9.                     Console.Write(a.ColumnName + ":");
  10.                     Console.Write(i[a.ColumnName].ToString() + "\t");
  11.                 }
  12.                 n++;
  13.             }
  14.             DataRow[] dr = UserTable.Select("Selected = 1");
  15.             MessageBox.Show(dr.Length.ToString());
  16.         }</p><p>
  17. </p><p>        //用一个额外的按钮可以正确获取到selected的值
  18.         private void simpleButton1_Click(object sender, EventArgs e)
  19.         {
  20.             int n = 1;
  21.             foreach (DataRow i in UserTable.Rows)
  22.             {
  23.                 Console.WriteLine("\r\n第 {0} 行", n);
  24.                 foreach (DataColumn a in UserTable.Columns)
  25.                 {
  26.                     Console.Write(a.ColumnName + ":");
  27.                     Console.Write(i[a.ColumnName].ToString() + "\t");
  28.                 }
  29.                 n++;
  30.             }
  31.             DataRow[] dr = UserTable.Select("Selected = 1");
  32.             MessageBox.Show(dr.Length.ToString());
  33.         }</p>
复制代码
具体症状是:
1、随便勾选一行后,点击barButtonItem1按钮,console输出中显示所有行的selected列的值都是0,获取到dr的长度也是0,
     再点击simpleButton1,console输出中显示被勾选的那一行的selected列的值是1,获取到dr的长度是1,
     这时候再点击barButtonItem1就可以返回正常的列数据和dr的长度。


2、每勾选一行后,点击一下barButtonItem1按钮
      输出显示:勾选一行,console输出中显示所有行的selected列的值都是0,获取到dr的长度也是0,
                     再勾选一行,console输出中显示上一次勾选的行的selected列的是1,当前勾选的行是0,获取到的dr长度是1,这时已经勾选了2行了,
                     继续勾选一行,console输出中显示第一次和第二次勾选的行的selected列是1,当前勾选的行是0,获取到的dr的长度是2,这时已经勾选了3行。
     但是每勾选一行点击一下simpleButton1按钮,勾选一行显示1,勾选两行显示2,勾选三行显示3,这就一切正常。


另外,把测试的代码写成一个方法,在ToolStrip或barManager中调用这个方法,也获取不到正确的值,而且在barButtonItem1中直接调用simpleButton1_Click(sender,e);也获取不到正确的值。
ToolStrip和barManager中的按钮都有这个问题,单独的按钮却没有这个问题,这个是BUG吗?还是其他什么问题?
1.jpg 2.jpg


3.jpg
回复

使用道具 举报

0

精华

174

贡献

985

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
195
软币
4374
在线时间
369 小时
注册时间
2013-6-7
发表于 2014-1-17 13:20:55 | 显示全部楼层
工具栏按钮的确是这样的,也不是BUG,工具栏按钮不获取焦点,所以不能让Grid触发改变数据源的事件. 普通按钮如果你设置为不允许获取焦点,应该也是类似的现象.

解决此问题的方法就是想办法用代码改变焦点, 类似于你勾选了一行后再在别的行点击一下.

针对此问题, 我一般是在 Form 上放置一个 TextBox,宽度1,高度0, 注意该TextBox不能设Visible = False,必须是可见的, 但因为高度或是宽度设置为0,实际上却看不到, 另外再设置其 TabStop 为 False.

在你的工具栏按钮事件中 将焦点 移到这个 TextBox, 然后再移回去.

评分

参与人数 1赞扬 +1 收起 理由
飘啊飘 + 1 很给力

查看全部评分

回复

使用道具 举报

0

精华

6

贡献

4

赞扬

帖子
15
软币
193
在线时间
28 小时
注册时间
2014-1-12
 楼主| 发表于 2014-1-17 13:52:31 | 显示全部楼层
nyfor 发表于 2014-1-17 13:20
工具栏按钮的确是这样的,也不是BUG,工具栏按钮不获取焦点,所以不能让Grid触发改变数据源的事件. 普通按钮如 ...

在工具栏按钮的代码最前面加了一个改变焦点的代码,确实正常了,太感谢了
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-12-23 17:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表