2010-10-06 2 views
1

Хорошо, у меня есть дерево, которое я использую для отображения нескольких узлов. Я хочу привязать данные (три поля текстового поля) к каждому узлу, но я не хочу показывать его в дереве. Я хочу сохранить данные в строку [] Массив, если это возможно. Я хочу, чтобы данные в блоках сохранялись в массивах, когда я нажимаю на новый узел в дереве и извлекаю информацию из массива для нового узла.сохранять текстовые поля в массив (и извлекать данные из массива) при использовании treeview в C#

По какой-то причине код, который у меня есть, не работает. Он не сохраняет информацию, а иногда просто показывает случайные данные в текстовых полях, когда я нажимаю. Код:

These are global variables within the form: 
    string[] desc1; 
    string[] desc2; 
    string[] desc3; 

private void treeView1_BeforeSelect(object sender, TreeViewEventArgs e) 
    { 

      // save the entered text into the local variables 
     desc1[treeView1.SelectedNode.Index] = textBox4.Text; 
     desc2[treeView1.SelectedNode.Index] = textBox5.Text; 
     desc3[treeView1.SelectedNode.Index] = textBox6.Text; 

    } 

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 
    { 

     // update labels 
     label23.Text = treeView1.SelectedNode.Text.ToString(); 
     label24.Text = (treeView1.SelectedNode.Index + 1).ToString(); 

     // enable all textbox fields 
     textBox4.Enabled = true; 
     textBox5.Enabled = true; 
     textBox6.Enabled = true; 

     // clear all textbox fields 
     textBox4.Text = null; 
     textBox5.Text = null; 
     textBox6.Text = null; 



     // if parent is selected then show as unselected - if not update text fields 
     if (treeView1.SelectedNode.Text.ToString() == "Parent Name") 
     { 
      label23.Text = "Unselected"; 
      label24.Text = "Unselected"; 
      textBox4.Enabled = false; 
      textBox5.Enabled = false; 
      textBox6.Enabled = false; 
     } 
     else 
     { 
      // show the information from the array in the text fields 
      textBox4.Text = desc1[treeView1.SelectedNode.Index]; 
      textBox5.Text = desc2[treeView1.SelectedNode.Index]; 
      textBox6.Text = desc3[treeView1.SelectedNode.Index]; 
     } 

    } 

У кого-нибудь есть идеи, что я могу сделать? Я трал google сейчас на 24 часа без везения. Спасибо!

ответ

1

TreeNodes имеет свойство Tag, которое вы можете использовать, чтобы прикрепить любые данные, которые вы хотите.

Вы бы использовать его как это:

// To set the data: 
myTreeNode.Tag = new string[] { "1", "2", "3" }; 

// To read the data: 
var data = myTreeNod.Tag as string[]; 
+0

Brilliant, я дал этот взрыв, сохранив данные в теги на предыдущей ListView (где я получил информацию для заполнения в TreeView) и его сейчас работает. благодаря! – RHodgett

0

Массивы не initalized.

+0

Извините, я не включил код для этого, однако я заверяю вас, что они: – RHodgett

+0

Проблема, в дополнение к тому, что вы должны передать в массив EventArgs.Node.Index, это то, что вы никогда ничего не сохраняете. Это происходит потому, что перед выбором вы вставляете новые значения: значения, которые вы видите в текстовых полях, - это новые значения, а не старые. –

0

Замените все свои ссылки на SelectedNode вместо TreeViewEventArgs.Node.

Пример кода:

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 
{ 

    // update labels 
    label23.Text = e.Node.Text.ToString(); 
    label24.Text = (e.Node.Index + 1).ToString(); 

    // etc etc... 
} 
+0

Я не мог заставить это работать. Спасибо, однако, за совет. – RHodgett

+0

@RHodgett: извините, я не поняла. Надеюсь, мой пример кода поможет вам разобраться. – code4life

+0

Спасибо, что работает, но он по-прежнему не решает мою проблему привязки данных. Я думаю о том, чтобы отказаться от дерева и использовать список. – RHodgett