2010-09-09 55 views
0

我將有一個帶有一些節點的treenode。我將在我的表單上有一個datagridview。最初我會將一些數據加載到gridview中。現在,如果我在我的trreview中選擇一個節點,我想將選定的行作爲特定的行。如何使特定的行在基於treeview選擇的datagridview中被選中

假設我的TreeView的是如下

根 | - >兒童 | - > Child1

如果我選擇孩子,我想作一個相應的行作爲選擇,如果child1另一行應該得到選擇。

任何想法請

回答

1

1)您需要的節點映射到對應的DataGrid行

this.dataGridView1.Rows[0].Tag = id; // a node id 

2)處理節點click事件,並通過ID找到相應的行,然後選擇它

if (tvwACH.SelectedNode.Parent != null) 
{ 
     int id = (int)tvwACH.SelectedNode.Tag ; // make sure you've already assigned tag when creating Three nodes and data rows 
     foreach(DataGridViewRow row in this.dataGridView1.Rows) 
     { 
      int rowId = (int)row.Tag ; 
      if(rowId == id) 
      { 
       row.Selected = ture; 
      } 
      else 
      { 
       row.Selected = false; //discard other rows 
      } 

     } 
} 
+0

row.tag和row.selected這些都沒有得到 – Dotnet 2010-09-09 09:49:17

+0

固定 「的DataGridViewRow」 行 – Arseny 2010-09-09 10:00:27

+0

INT ID = tvwACH.SelectedNode.Tag這引起了我的錯誤爲\t不能將類型'object'隱式轉換爲'int'。 – Dotnet 2010-09-09 10:06:05

0

這是代碼ih AVE書面

private void tvwACH_AfterSelect(object sender, TreeViewEventArgs e) 
    { 

     string node = string.Empty; 
     if (tvwACH.SelectedNode.Parent != null) 
     { 
      node = tvwACH.SelectedNode.Text.ToString(); 
      if (node == "FileHeader") 
      { 
       int tag = Convert.ToInt16(tvwACH.SelectedNode.Tag.ToString()); 
       this.dataGridView1.Rows[0].Tag = tag; 
       foreach (DataGridViewRow row in dataGridView1.Rows) 
       { 
        int rowId = (int)row.Tag; 
        if (rowId == tag) 
        { 
         row.Selected = true; 
        } 
       } 
      } 

      string strSwitch = tvwACH.SelectedNode.Parent.Text; 
      switch (strSwitch) 
      { 
       case "ACH": 
        { 
         dataGridView1.Visible = true; 
         dataGridView1.Rows.Clear(); 
         node = tvwACH.SelectedNode.Text; 
         StreamReader sr = new StreamReader(node); 
         while (sr.Peek() >= 0) 
         { 
          string line = sr.ReadLine(); 
          dataGridView1.Rows.Add(rectype[line.Substring(0, 1)].ToString(), line); 
         } 
         sr.Close(); 
        } 

        break; 

      } 
     } 
    } 
+0

this.dataGridView1.Rows [X] .Tag =標籤; //其中x是當前行,您可以將它添加到datagrid的新行並將當前(選定)節點的id – Arseny 2010-09-09 11:53:31

0

試試這個:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    int flage = 1; 
    private void button1_Click(object sender, EventArgs e) 
    { 
     flage = 1; 
     for (int i = 0; i < dataGridView1.Rows.Count; i++) 
     { 

      if (dataGridView1.Rows[i].Selected) 
      { 
       DataGridViewRow currentRow = dataGridView1.SelectedRows[0]; 


       TreeNode node1 = new TreeNode(currentRow.Cells[1].Value.ToString()); 
       TreeNode node2 = new TreeNode(currentRow.Cells[2].Value.ToString()); 
       TreeNode node3 = new TreeNode(currentRow.Cells[3].Value.ToString()); 
       TreeNode[] TreeArray = new TreeNode[] { node1,node2, node3 }; 
       TreeNode finalnode = new TreeNode(currentRow.Cells[0].Value.ToString(), TreeArray); 

       treeView1.Nodes.Add(finalnode); 
       flage = 1; 
       break; 
      } 
      else 
      { 
       flage = 0; 


      } 
     } 
     if(flage==0) 
     { 
      MessageBox.Show("Row is not Selected Please select the row"); 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     treeView1.Nodes.Remove(treeView1.SelectedNode); 
    } 

    int flage2; 
    private void button3_Click(object sender, EventArgs e) 
    { 

     for (int i = 0; i < dataGridView1.Rows.Count; i++) 
     { 
      if (dataGridView1.Rows[i].Selected) 
      { 
       dataGridView1.Rows.Remove(dataGridView1.SelectedRows[0]); 
       flage2 = 1; 
       break; 
      } 

      else 
      { 
       flage2 = 0; 
      } 
     } 
     if (flage2 == 0) 
     { 
      MessageBox.Show("Row is not selected Please select the row"); 
     } 

    } 
} 
相關問題