在GridView中访问TreeView窗体以填充ComboBox集合

时间:2016-01-13 19:29:42

标签: c# winforms gridview combobox treeview

我在Windows窗体应用程序中遇到以下问题。我有两种形式:使用TreeView的CategoryTree.cs形式和内部带有DataGridView的ProjectForm.cs。我想用TreeView节点文本填充DataGridViewComboBoxColumn Collection,例如我的树看起来像这样:

Science Fiction 
   Movie1
   Movie2 
Horror 
   Movie1
   Movie2
Action
   Movie1
   Movie2

等等。我希望这些类别是ComboBoxColumn中的项目。我的代码在CategoryTree表单中如下所示

public partial class CategoryTree : Form
{
   //adding nodes to the tree
   private void button2_Click(object sender, EventArgs e)
   {
      TreeNode newone = new TreeNode();
      newone.ForeColor = Color.Orange;
      newone.NodeFont = new Font(catTreeView.Font, FontStyle.Bold);
      newone.Text = nameBox.Text;
      catTreeView.Nodes.Add(newone);

      //and code for adding child and grandchild and ...

   }
   //other stuff 
}

在DataGridView中我有以下方法

public void AddComboBox()
    {
        int i;
        CategoryTree cat_Form = new CategoryTree();
        //Set the cat_Form Active
        cat_Form = ActiveForm as CategoryTree;
        if (cat_Form != null)
        {
            i = cat_Form.catTreeView.Nodes.Count;  //here i get exception
            if(i != 0)
            {
                var newone2 = new DataGridViewComboBoxColumn();
                newone2.HeaderText = "Main category";
                newone2.Name = "ColNr_" + nofCols;
                string comboTxt;

                for(int j=0; j<i; j++){
                comboTxt = catTreeView.Nodes[j].Text;
                newone2.Items.Add(comboTxt);
                }

                mainProjectGrid.Columns.Add(newone2);
                nofCols += 1;
            }

        }
    }

不幸的是,这段代码生成了System.NullReferenceException&#39;。 catTreeView修饰符设置为&#39; public&#39;。我有很多不同的方法解决这个问题,但没有一个能够解决问题。

正如您可能看到我的问题所在 - 如何从ProjectForm表单中获取catTreeView对象并填充组合框?

我是绝对的初学者,所以我总是很感激使用示例代码的答案。

1 个答案:

答案 0 :(得分:0)

可能引起关注的人。我找到了解决这个问题的方法。在TreeView中,我添加了一个以这种方式编程的按钮

private void applyBtn_Click(object sender, EventArgs e)
{
    ProjectForm newProject1 = new ProjectForm( catTreeView );
    newProject1.MdiParent = this.ParentForm;
    newProject1.Text = "blabla";
    newProject1.Show();
}

接下来,我将其添加到ProjectForm.cs

public ProjectForm(TreeView catView)
{
    InitializeComponent();
    holalala = catView;
}

public void AddComboBox()
{
    int i;
    if (holalala != null)
    {
        i = holalala.Nodes.Count;
        if (i != 0)
        {
            var newone2 = new DataGridViewComboBoxColumn();
            newone2.HeaderText = "Main category";
            newone2.Name = "ColNr_" + nofCols;
            string comboTxt;

            for (int j = 0; j < i; j++)
            {
                comboTxt = holalala.Nodes[j].Text;
                newone2.Items.Add(comboTxt);
            }

            mainProjectGrid.Columns.Add(newone2);
            nofCols += 1;
        }
     }
}

此解决方案非常简单,工作正常。我想我现在可以添加几行不仅可以添加列,还可以使用可能出现在TreeView中的新节点更新它们。我将在稍后处理:)。