我在全局字典中保存了几个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仍然不会在表单中显示表。
答案 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());
}