WinForms在datagridview中显示datagridview对象

时间:2016-06-09 10:38:02

标签: c# winforms datagridview

我在全局字典中保存了几个datagridview对象。我想找到一个特定的datagridview对象并在datagridview中显示它。一切似乎都适用于实际显示。 这是要显示的代码

if (seznamPodatkov.ContainsKey(tn.Text))
            {
                dataGridView1.DataSource = seznamPodatkov[tn.Text];

            }

也许我应该使用数据绑定,但我不知道如何将它与许多datagrid对象一起使用,从中我得到了正确的数据。

编辑: 下面的代码保存了datagridview对象,稍后应该对其进行恢复和显示。 datagridview根据树视图而变化,如果单击具有子节点的节点,则首先检查来自此父节点的网格视图是否已存在。如果是,它应该从字典中显示datagrid,如果没有,它会创建一个新的并将其保存到字典中。

private Dictionary<string, DataGridView> seznamPodatkov;  

  if (tree1.SelectedNode == null) return;
            if(tree1.SelectedNode.GetNodeCount(false) > 0)
            {
                if (seznamPodatkov.ContainsKey(tree1.SelectedNode.Text))                              
                {
                    seznamPodatkov[tree1.SelectedNode.Text] = dataGridView1;
                }
                else seznamPodatkov.Add(tree1.SelectedNode.Text, dataGridView1);
            }

private void tree1_AfterSelect(object sender, TreeViewEventArgs e)                  
        {
            TreeNode tn = tree1.SelectedNode;
            if (tn == null) return;
            if (tn.GetNodeCount(false) > 0)
            {
                dataGridView1.Columns.Clear();

                if (seznamPodatkov.ContainsKey(tn.Text))
                {
                    dataGridView1.DataSource = seznamPodatkov[tn.Text];

                }
                else
                {
                    dataFill(tn);


                }
                dataGridView1.Show();

            }
            else dataGridView1.Hide();
        }     

编辑:

我取得了一些进展。我试过这样的话:

      DataGridView dgv = new DataGridView();
        dgv.Columns.Add("something", "something");
        dgv.Columns.Add("something", "something");
        dgv.Columns.Add("something", "something");

        dataGridView1 = dgv;

datagridView1似乎得到了dvg列,因为我用调试器检查了它。我不知道这是否正确,因为dataGridView1仍然不会在表单中显示表。

2 个答案:

答案 0 :(得分:0)

当我有这种需要时,我会以不同的方式处理事情。我使用支持隐藏标签的自定义TabControl,并将其与TreeView结合使用,其选择事件控制显示哪个标签页。

这提供了一个视图切换树选择的错觉,而实际上你将在窗体上有多个单独的控件。这样您就可以取消Dictionary,只需将每个DataGridView直接绑定到其数据源。

答案 1 :(得分:0)

我明白了。首先我认为就是这么简单:dgv = dgv1但不是。

这是一个完美运行的测试代码:

 Dictionary<string, DataGridView> dic;
    public Form1()
    {
        InitializeComponent();

        dataGridView2.Columns.Add("nekaj", "nekaj");
        dataGridView2.Columns.Add("nekaj", "nekaj");
        dataGridView2.Columns.Add("nekaj", "nekaj");
        dataGridView2.Rows.Add("1", "2", "3");
        dataGridView2.Rows.Add("1", "2", "3");
        dataGridView2.Rows.Add("1", "2", "3");
        dic = new Dictionary<string, DataGridView>();
        dic.Add("test", dataGridView2);

    }


    private void button1_Click(object sender, EventArgs e)
    {

        foreach(DataGridViewColumn columns in dic["test"].Columns)
        {
            dataGridView1.Columns.Add(columns.Name, columns.HeaderText);
        }

        foreach(DataGridViewRow rows in dic["test"].Rows)
        {
            ArrayList list = new ArrayList();


          foreach(DataGridViewCell cell in rows.Cells)
            {
                list.Add(cell.Value);
            }

            dataGridView1.Rows.Add(list.ToArray());

        }