在VS2008中用Arraylist控制C#DataGridView

在VS2008中用Arraylist控制C#DataGridView,c#,winforms,visual-studio-2008,datagridview,tabcontrol,C#,Winforms,Visual Studio 2008,Datagridview,Tabcontrol,我在VS2008中使用的datagridview元素有一些问题。 这个DataGridView实际上是TabControl元素中的一个选项卡 我给了它5个柱,需要用我制作的肋骨物体的元素填充 它基本上是一个小型的库应用程序,包含一个主类和几个派生自它的类。它们都有一个ToString()方法,该方法将数据表示为包含填充datagridview所需值的关键字字符串 我只需要前5个,但有些对象将有多达12个关键字。 目前,每当我添加一个对象时,datagrid不会自动填充,相反,它会添加与特定对象的

我在VS2008中使用的datagridview元素有一些问题。 这个DataGridView实际上是TabControl元素中的一个选项卡

我给了它5个柱,需要用我制作的肋骨物体的元素填充

它基本上是一个小型的库应用程序,包含一个主类和几个派生自它的类。它们都有一个ToString()方法,该方法将数据表示为包含填充datagridview所需值的关键字字符串

我只需要前5个,但有些对象将有多达12个关键字。 目前,每当我添加一个对象时,datagrid不会自动填充,相反,它会添加与特定对象的关键字数量相等的列

我目前正在做的是:

public void libDataGrid_Click(object sender, EventArgs e)
        {
            if(this.manager.Lib.LibList[0] != null)
            {
                libDataGrid.DataSource = this.manager.Lib.LibList;
                libDataGrid.Refresh();
            }
        }
this.manager.Lib.LibList
返回和ArrayList,所有对象都存储在其中。ArrayList可以包含所有派生类的元素,但由于它们都是连接的,所以字符串表示将始终包含填充网格所需的元素

我不知道如何才能只过滤前五个,然后把它们放在正确的列中

还有一件事。目前,我只能通过单击DataGridView来刷新它。当我切换到Tabcontrol上的特定选项卡时,它应该会打开

我尝试为SelectedIndexChanged添加一个参数,但实际上没有任何作用。。。 或者至少,它似乎什么也没做

我的意思是我注释掉了上面的代码,并添加了以下内容:

public void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
                libDataGrid.DataSource = this.manager.Lib.LibList;
                libDataGrid.Refresh();
        }
每次更改选项卡时,无论更改为哪一个选项卡,都会刷新该选项卡。
我不得不删除if语句,因为它给了我一个例外。可能是因为ArrayList的长度没有在初始化时设置。

我只能给出部分答案,但我认为原因是

public void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
                libDataGrid.DataSource = this.manager.Lib.LibList;
                libDataGrid.Refresh();
        }
不起作用,是因为您需要在tabControl1初始化的位置添加此行。我遇到过这样的问题,VS自己不会这样做

tabControl1.SelectedIndexChanged += new EventHandler(tabControl1_SelectedIndexChanged);

如果我理解你的问题,它似乎类似于我最近在这篇文章中努力解决的问题

请尝试拨打:

libDataGrid.Invalidate();
这将强制Windows重新绘制控件。无需重新连接数据源并刷新。(我想你可以安全地注释掉这两行。)

另外:您得到的例外情况是什么


您是否使用了“数据源配置向导”来帮助您使用dataGridView?

我对这个问题有点困惑,但以下是一些想法:

  • DataGridView
    有一个属性;如果不希望它创建自己的列,请将其设置为false
  • 要绑定到现有列,必须在每个列上设置
  • DataGridView
    (在使用
    TypeDescriptor
    的任何列表控件的cmomon中)将非常喜欢
    list
    (对于某些
    T
    !=
    对象
    )到
    ArrayList
    ,因为它甚至可以为空列表获取元数据。一般来说,在2.0中使用
    ArrayList
    是一个错误

  • 异常是ArgumentOutOfRangeException我尝试了配置向导,但这只是为了让我选择构造函数,它保存的不仅仅是ArrayList。好吧,值得一试。祝你好运