2010-09-09 10 views
0

Je vais avoir un todeode avec quelques nœuds. Je vais avoir un datagridview sur mon formulaire. Au départ, je vais charger des données dans le gridview. Maintenant, si je sélectionne un nœud à mon trreview, je voudrais faire une ligne particulière en tant que sélectionné.Comment rendre la ligne particulière sélectionnée dans datagridview en fonction de la sélection treeview

Supposons que mon TreeView est la suivante

Racine | -> Enfant | -> Enfant1

Si je sélectionne enfant je voudrais faire une ligne correspondante comme sélectionnée si child1 une autre ligne doit être sélectionné .

Toute idée s'il vous plaît

Répondre

1

1) vous devez mapper les noeuds aux lignes DataGrid correspondant

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

2) Poignée événement click de nœud et de trouver la ligne correspondant par identifiant et sélectionnez

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 et row.selected ceux-ci étaient de ne pas obtenir – Dotnet

+0

fixé à "DataGridViewRow" ligne – Arseny

+0

int id = tvwACH.SelectedNode.Tag Cela me pose un erreur en tant que \t Impossible de convertir implicitement le type 'objet' en 'int'. – Dotnet

0

Ceci est le code ih ave écrit

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 = tag; // où x est la ligne courante, vous l'assignez où vous ajoutez une nouvelle ligne à la grille de données et passez l'identifiant du noeud courant (sélectionné) – Arseny

0

Essayez ceci:

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"); 
     } 

    } 
}