2010-03-05 31 views
1

我有.NET CF应用程序,与包含我已经使用主要来自本文的溶液结合到的BindingList一个数据网格的一种形式:http://msdn.microsoft.com/en-us/library/aa480736.aspx发布DataGrid的MouseUp变更!

我迷上它,以便当一个列标题被点击,我得到HitTest信息并检查Type。如果Type是ColumnHeader,那么我在底层BindingList(使用类似于上面链接中的示例的代码)上启动一个排序 - 这反过来又使DataGrid根据我点击的T属性进行排序。例如。说明

这工作绝对好!

当我现在点击我的数据网格时,问题出现了 - 假设我有两行,执行排序后,没有选中行。我点击第1行中的一个单元格,并且我有选择整行的代码 - 此操作发生并且一切正常。当我现在点击第2行时,第2行被选中,一切正常,网格仍然适用我的排序。如果我现在再次单击第1行,我的排序就会颠倒过来,但重要的是,“ApplySort”方法实际上并未被调用。那么发生了什么?它只发生在我点击第1行时,网格中的两行有效反转。在选择第2行时,它不会发生。在调试时,我可以看到mousedown触发(我已经放入了一个return;语句),然后MouseUp触发,如果已经点击了columnheader,它会执行HitTest并调用ApplySort,在这种情况下它不会。我注意到排序发生了变化* AFTER *控制已经离开了MouseUp事件 - 因此在MouseDown/MouseUp完成后,某处某处似乎正在改变我的网格状态。

任何想法事件/动作可能会与我的网格搞乱?我基本上想知道,一旦我调用了我的ApplySort,是否可以压制任何东西。

回答

0

我不期望有很多答案......但我刚才注意到,这种行为只发生在排序列包含彼此相同的值时。

列中数据不同的行为不会发生。

所以我想这可能是设计 - 我应该使实现更少泛型,并对包含不同值的特定id属性进行排序,而不是根据用户点击的内容动态排序列 - 因为这可能会有我描述的副作用。