ドキュメント構造
Form_1:
- Panel1: - gridView;
- Panel2: - treeList;
- Panel3: - UserControl (選択したツリー ノードによって異なります)。
シナリオ 1:
- ユーザー。グリッド内の行を選択します。
- コード。gridView でフォーカスがある行の「ID」値を変数に送信します。(gridView イベントによって処理されます)。
- コード。デフォルトでは、フォーカスはノード "Node_1" treeList (gridView イベントによって処理されます) に置かれます。
- ユーザー。treeList 内のノードを選択します。
- Panel3 には、gridView の「ID」行と treeList のノードの「ID」に対応する UserControl が表示されます (treeList イベントによって処理されます)。
シナリオ 2:
ユーザー。gridView の行間でのみフォーカスを移動します
。treeList では、フォーカスは常に同じノードにあります。
問題: Panel3 はユーザー コントロール "UserControl_1" を表示しますが、これは grid_1 "row_1" にのみ一致します。
実現方法:
- Panel1 --- Panel2 ----- Panel3
- "lines_1" - "Node_1" - "UserControl_1";
- "lines_2" - "Node_1" - "UserControl_2";
- "lines_3" - "Node_1" - "UserControl_3";
質問。
問題「Scenario_2」を修正するには?
private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
{
try
{
idParser = Convert.ToInt32(gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "ID"));
TreeListNode nodeFocus = treeList2.FindNodeByKeyID(20);
treeList2.SetFocusedNode(nodeFocus);
}
catch (Exception)
{
return;
}
}
private void treeList2_AfterFocusNode(object sender, NodeEventArgs e)
{
int idNode = Convert.ToInt32(e.Node.GetValue("ID")); // "ID" вбыранного узла
switch (idNode)
{
case 20:
pathToSettingsMain = maskPath + idParser.ToString() + ".xml";
f01startURLs = new F01StartURLs(pathToSettingsMain);
splitContainer2.Panel2.Controls.Clear();
splitContainer2.Panel2.Controls.Add(f01startURLs);
userControlCurent = f01startURLs;
break;
}