安心海叶 发表于 2015-10-14 12:34:00

C1DataGrid问题

打扰了,想请教另外一个问题,现在DataGrid的列表只显示了6行数据,但m_NewData与cmbCol的列表参数值是对应的。
如何在添加m_NewData后,当改变cmbCol选择的值时,新添加的列对应行的值也改变?

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 即可;
// string bindingName = propertyName + "[" + index + "]";
string bindingName = cmbCol.SortMemberPath;
m_NewExtendCols = newCol;
newCol.Binding = new Binding(cmbCol.SortMemberPath);

安心海叶 发表于 2015-10-14 14:27:00

回复 4楼KNight的帖子

您理解的是对的,但是cmbCol下来框改变时,后面扩展列的对应值应该是m_NewData数组中对应的值,而不应该是1,2,3,4,5,6,7,8,9,10,11...的结果,请指导?

KNight 发表于 2015-10-14 17:27:00

回复 5楼安心海叶的帖子

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

我理解的是新增的数据 m_NewData 应该是和第一列的下拉框是一一对应的关系是吧?

安心海叶 发表于 2015-10-14 17:31:00

回复 6楼KNight的帖子

是的,是一一对应的关系。这样下拉框改变参数时,DataGrid相应行显示对应的参数

安心海叶 发表于 2015-10-14 17:33:00

回复 6楼KNight的帖子

我查找了DataGridComboBoxColumn的处理函数,没有相应的选择项改变事件处理函数...不知道怎么做了

KNight 发表于 2015-10-14 18:23:00

回复 8楼安心海叶的帖子

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

dgSVC.CommittingEdit += (sender, e) =>
{
        if (e.Column.Header.ToString().Equals("参数"))
        {
                C1ComboBox _currCMB = e.EditingElement as C1ComboBox;
                // 行为e.RowIndex;列要对应你要级联的那一列索引
                m_BindingSource.ExtendProperties = m_NewData;
                dgSVC.Refresh(true, true, true, false, false);
        }
};

安心海叶 发表于 2015-10-15 17:41:00

回复 9楼KNight的帖子

非常感谢,已经实现操作DataGrid的全部功能,拜谢~
页: [1] 2
查看完整版本: C1DataGrid问题