2010年7月16日 星期五

將DataGridView上的資料拖曳至TreeView

當使用者按下dataGridView上的一個欄位時,將該Row的資料擷取出來,然後依據此資料在TreeView上建立資料

DataGridView

1.宣告dataGridView的MouseDown事件的處理函式

DataGridView dataGridView = new DataGridView();
dataGridView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.dataGridView_MouseDown);

2.撰寫MouseDown事件的處理函式

private void dataGridView_MouseDown(object sender, MouseEventArgs e)
{
DataGridView dataGridView = (DataGridView)sender;
if (e.Button == MouseButtons.Left)
{
DataGridView.HitTestInfo info = dataGridView.HitTest(e.X, e.Y);
if (info.RowIndex >= 0)
{
int i = info.RowIndex; //info.RowIndex表示使用者所預計要拖曳的該Row的Index
//取得該Row的相關資料,用一個Hashtable去儲存
Hashtable data = new Hashtable();
......
......
if (data!= null)
dataGridView.DoDragDrop(data, DragDropEffects.Copy);
}
}
}

TreeView

1.當資料拖曳到TreeView上時,判定該資料是不是可以放在該位置,故宣告treeView的DragOver事件的處理函式

TreeView treeView = new TreeView();
treeView.DragOver += new System.Windows.Forms.DragEventHandler(this.treeView_DragOver);

2.當使用者拖曳到第一層節點會是第二層節點時,可以允許在treeView上建立新的資料

private void treeView_DragOver(object sender, DragEventArgs e)
{
Point point = treeView.PointToClient(Cursor.Position);
treeView.SelectedNode = treeView.GetNodeAt(point);
if (treeView.SelectedNode == null)
{
e.Effect = DragDropEffects.None;
return;
}
if (this.treeView.SelectedNode.Level == 1 || treeView.SelectedNode.Level == 0)
{
e.Effect = DragDropEffects.All; //可以在該位置上進行建構
}
else
{
e.Effect = DragDropEffects.None;
}
}

3.使用者將滑鼠放開,進行資料建立。需宣告負責資料建立的函式

treeView.DragDrop += new System.Windows.Forms.DragEventHandler(treeView_DragDrop);

4.撰寫資料建立之函式

private void treeView_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(Hashtable))) //之前是設定將資料儲存於Hashtable中
{
//取得資料
Hashtable data = (Hashtable)e.Data.GetData(typeof(Hashtable));
//進行建構
......
......
}
}

沒有留言:

張貼留言