找回密码
 立即注册

QQ登录

只需一步,快速开始

安心海叶

中级会员

66

主题

255

帖子

717

积分

中级会员

积分
717

活字格认证微信认证勋章

安心海叶
中级会员   /  发表于:2015-10-14 12:34  /   查看:9602  /  回复:10
打扰了,想请教另外一个问题,现在DataGrid的列表只显示了6行数据,但m_NewData与cmbCol的列表参数值是对应的。
如何在添加m_NewData后,当改变cmbCol选择的值时,新添加的列对应行的值也改变?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

10 个回复

倒序浏览
KNight
中级会员   /  发表于:2015-10-14 12:38:00
沙发
回复 1楼安心海叶的帖子

下午帮您看一下,午饭时间......:p6qoz:
回复 使用道具 举报
安心海叶
中级会员   /  发表于:2015-10-14 12:42:00
板凳
回复 2楼KNight的帖子

好的~先表示感谢啦~
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-10-14 13:35:00
地板
回复 3楼安心海叶的帖子

我理解的是,您想要实现后面扩展的列和第一列的下拉框选项 形成类似级联菜单,当下拉框选择改变时,后面扩展列的值对应改变,是吧?
其实代码里已经实现好了,就是有一个地方不对,改一下就好了;
在CreateCustomCol()方法中:
刚开始定义了扩展列的绑定 newCol.Binding = new Binding(cmbCol.SortMemberPath);
但是在ComboBox的点击事件里,是会根据ComboBox的Tag进行重新绑定的;
而Tag定义的是 string bindingName = propertyName + "[" + index + "]"; 这个值,不是你后面改成的 cmbCol.SortMemberPath ;

造成当你没点击CheckBox时,是会有级联效果的;当你点击过一次之后,扩展列的绑定内容就不会再改变了;

只需要将其中的bindingName设置成你要绑定的名称 cmbCol.SortMemberPath 即可;
  1. // string bindingName = propertyName + "[" + index + "]";
  2. string bindingName = cmbCol.SortMemberPath;
  3. m_NewExtendCols[bindingName] = newCol;
  4. newCol.Binding = new Binding(cmbCol.SortMemberPath);
复制代码
回复 使用道具 举报
安心海叶
中级会员   /  发表于:2015-10-14 14:27:00
5#
回复 4楼KNight的帖子

您理解的是对的,但是cmbCol下来框改变时,后面扩展列的对应值应该是m_NewData数组中对应的值,而不应该是1,2,3,4,5,6,7,8,9,10,11...的结果,请指导?
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-10-14 17:27:00
6#
回复 5楼安心海叶的帖子

这种级联需要手动处理吧,就是在第一列下拉框选择项改变时,需要手动更新m_NewData中对应的数据的;

我理解的是新增的数据 m_NewData 应该是和第一列的下拉框是一一对应的关系是吧?
回复 使用道具 举报
安心海叶
中级会员   /  发表于:2015-10-14 17:31:00
7#
回复 6楼KNight的帖子

是的,是一一对应的关系。这样下拉框改变参数时,DataGrid相应行显示对应的参数
回复 使用道具 举报
安心海叶
中级会员   /  发表于:2015-10-14 17:33:00
8#
回复 6楼KNight的帖子

我查找了DataGridComboBoxColumn的处理函数,没有相应的选择项改变事件处理函数...不知道怎么做了
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-10-14 18:23:00
9#
回复 8楼安心海叶的帖子

参考代码,C1DataGrid可以在CommittingEdit事件或者BeginningEdit事件中,通过参数e.EditingElement 获取当前正在编辑的单元格的真实控件:

  1. dgSVC.CommittingEdit += (sender, e) =>
  2. {
  3.         if (e.Column.Header.ToString().Equals("参数"))
  4.         {
  5.                 C1ComboBox _currCMB = e.EditingElement as C1ComboBox;
  6.                 // 行为e.RowIndex;列要对应你要级联的那一列索引
  7.                 m_BindingSource[e.Row.Index].ExtendProperties[0] = m_NewData[_currCMB.SelectedIndex];
  8.                 dgSVC.Refresh(true, true, true, false, false);
  9.         }
  10. };
复制代码

评分

参与人数 1金币 +999 收起 理由
Alice + 999 奖励金币

查看全部评分

回复 使用道具 举报
安心海叶
中级会员   /  发表于:2015-10-15 17:41:00
10#
回复 9楼KNight的帖子

非常感谢,已经实现操作DataGrid的全部功能,拜谢~
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部