Как сделать так, чтобы конкретная строка была выбрана в сетке данных на основе выбора дерева - PullRequest
0 голосов
/ 09 сентября 2010

У меня будет триода с некоторыми узлами.У меня будет датагридвью в моей форме.Первоначально я загружу некоторые данные в сетку.Теперь, если я выберу узел в моем trreview, я хотел бы сделать определенную строку как выбранную.

Предположим, мое древовидное представление выглядит следующим образом

Root | -> Child | -> Child1

Если я выбираю child, я хотел бы сделать соответствующую строку, как было выбрано, если child1 должна быть выбрана другая строка.

Любая идея, пожалуйста

Ответы [ 4 ]

1 голос
/ 09 сентября 2010

1) необходимо сопоставить узлы с соответствующими строками сетки данных

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

2) обработать событие щелчка узла, найти соответствующую строку по идентификатору и выбрать ее

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 голосов
/ 24 февраля 2012

Попробуйте это:

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

    }
}
0 голосов
/ 09 сентября 2010

Это код, который я написал

   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 голосов
/ 09 сентября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...