2016-05-10 6 views
1

これはSystem.Windows.Forms.Datagridに関する質問です。WindowsフォームのDataGrid - Handel行ヘッダーの展開ボタン[+]をクリック

「購入詳細リンクボタン」「拡張」ボタンをクリックした後、図2に直接移動することはできますか?私はそれが欲しいわけではないことを意味する"購入詳細リンクボタン"

それは可能ですか?

Fig 1

Fig 2

+0

あなたの行はクリッカブル作る、あるいは行のクリックを処理するイベントを追加し、私はリンクボタンまたは子テーブルの参照を取得する方法を知っていましたが –

+0

@monstertjie_zaにあなたの必要なコードを配置します。 – user2115618

+0

さらなる助けが必要ですか? –

答えて

0

@monstertjie_zaが言ったように、最も簡単な方法は次のようになります。行にクリックイベントを追加し、すべてのフィールドを自由にスタイル設定できる新しいフォームを開きます。

オプションで、図2のフォームをclickイベントで開くことができます。

+0

私は偶数クリックを追加しました。私はそのリンクボタンの参照を知っていない。私はそれを実装するための良い例を見つけることができませんでした – user2115618

+0

あなたは一次IDを持って、あなたの例では、ID nr.50のように、このIDを一緒にフォームをリンクするために使用します。新しいウィンドウを読み込み、次のようにIDを追加するclickイベントでは:form2 nwForm = new form2(ID); 新しいフォームでは、クリックした注文のIDを使用してすべての詳細を表示します。 – Giellez

0

DatGridコントロールには、反射を使用して見つけることができ、イベントに登録できるプライベートNodeClickedイベントがあります。この方法で、行ヘッダーの+をクリックすることができます。

NavigateToメソッドを使用してクリックされたノードの関連テーブルに移動することができます。DataGrid

この方法では、行ヘッダーで+をクリックした直後にナビゲーションが実行されます。

private void Form1_Load(object sender, EventArgs e) 
{ 
    var eventsProperty = dataGrid1.GetType().GetProperty("Events", 
          System.Reflection.BindingFlags.NonPublic | 
          System.Reflection.BindingFlags.Instance); 
    EventHandlerList events = eventsProperty.GetValue(dataGrid1) as EventHandlerList; 
    var eventsNodeClickedKeyField = dataGrid1.GetType().GetField("EVENT_NODECLICKED", 
          System.Reflection.BindingFlags.NonPublic | 
          System.Reflection.BindingFlags.Static); 
    object eventsNodeClickedKey = eventsNodeClickedKeyField.GetValue(null); 
    events.AddHandler(eventsNodeClickedKey, new EventHandler(dataGrid1_NodeClicked)); 
} 

private void dataGrid1_NodeClicked(object sender, EventArgs e) 
{ 
    var grid = sender as DataGrid; 
    var point = grid.PointToClient(MousePosition); 
    var hti = grid.HitTest(point); 
    grid.NavigateTo(hti.Row, "RelationName"); 
} 
関連する問題