我没有找到任何令人满意的答案或解决我的问题。我有一个主 - 细节网格(仅限2个级别),仅限单个选择。一些相关的代码:
<dxg:GridControl AutoGenerateColumns="None" Name="gridControlMaster" AutoExpandAllGroups="True">
<dxg:GridControl.View>
<dxg:TableView ShowGroupPanel="False" />
</dxg:GridControl.View>
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="Entry.Date" Header="Entry date" Visible="True" AllowEditing="False" />
</dxg:GridControl.Columns>
<dxg:GridControl.DetailDescriptor>
<dxg:DataControlDetailDescriptor ItemsSourcePath="EntrySubList" ShowHeader="False">
<dxg:DataControlDetailDescriptor.DataControl>
<dxg:GridControl AutoGenerateColumns="None" AutoExpandAllGroups="True">
<dxg:GridControl.View>
<dxg:TableView AutoWidth="True" ShowGroupPanel="False" ShowColumnHeaders="False" />
</dxg:GridControl.View>
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="Label" Header="Label" Visible="True" AllowEditing="False" />
<dxg:GridColumn FieldName="Value" Header="Value" Visible="True" AllowEditing="False" />
</dxg:GridControl.Columns>
</dxg:GridControl>
</dxg:DataControlDetailDescriptor.DataControl>
</dxg:DataControlDetailDescriptor>
</dxg:GridControl.DetailDescriptor>
</dxg:GridControl>
在某些时候(比如在GridControl外面点击一些按钮)我需要当前选中的主网格项,而不管细节网格中选择的子项是什么!目前,如果我单击主网格中的某一行,然后单击详细网格中的某些行(主网格中除了先前选定的行之外还有其他父级),则CurrentItem或SelectedItem不是所需的行(它是最后选择的项目)主网格,它应该至少是当前highlited细节项的父级)。这可能会误导用户。
理想的解决方案是使用某种“选择单元”,在我的例子中是整个主项目,以及所有子项目(详细网格)。因此,对于网格用户点击,主要或详细信息中的任何项目,都会选择主项目及其所有子项目(高亮显示)。主网格的CurrentItem是当前选定的父项。
另一种可能的解决方案是仅允许选择主网格项 - 并防止在详细网格中进行选择(仅在设计上选择SelectionMode = none GridControl不会这样做!)。在这种情况下,另一个很好的功能是单击子项(尝试选择它)在主网格中选择其父项。
如果需要任何进一步的信息,我会提供。
谢谢你的回答。
答案 0 :(得分:1)
据我所知,您描述的问题已在DevExpress支持中心的上下文中讨论过 Master-detail grid SelectedItem behaves unexpectedly when clicking detail rows线程。 此线程中提供的解决方案 - 创建与主View的所选项关联的附加属性,并在FocusedViewChanged事件处理程序中更新此属性。请查看上面讨论的sample project。我相信它应该会把你推向正确的方向。
答案 1 :(得分:0)
我做了类似的事情:
<dxg:GridControl AutoGenerateColumns="None" Margin="0,36,1,0" Name="gridControlMaster" AutoExpandAllGroups="True">
<dxg:GridControl.View>
<dxg:TableView ShowGroupPanel="False" FocusedViewChanged="gridControlMaster_TableView_FocusedViewChanged" />
void gridControlMaster_TableView_FocusedViewChanged(object sender, FocusedViewChangedEventArgs e)
{
int rowHandle = ((GridControl)e.NewView.DataControl).GetMasterRowHandle();
if (GridControl.InvalidRowHandle == rowHandle) return;
gridControlMaster.SelectedItem = gridControlMaster.GetRow(rowHandle);
}
绑定到主GridControl的SelectedItem属性的某些测试TextBox显示在Detail GridControl中选择子项时选择的右主记录。这对我来说已经足够了。