1

我在 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 的长度。

4

3 回答 3

3

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

  1. DataGridView具有AutoGenerateColumns属性;如果您不希望它创建自己的列,请将其设置为 false
  2. 要绑定到现有列,DataPropertyName必须在每个列上设置
  3. DataGridView(在使用任何列表控件的 cmomon 中TypeDescriptor)将非常喜欢List<T>(对于某些T!= object)而ArrayList不是 ,因为即使对于空列表,它也可以获得元数据。一般来说,在 2.0 中使用ArrayList是错误的。
于 2008-11-25T23:51:25.983 回答
0

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

public void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
                libDataGrid.DataSource = this.manager.Lib.LibList;
                libDataGrid.Refresh();
        }

不起作用,是因为您需要在初始化 tabControl1 的位置添加这一行。我遇到了这个问题,VS 自己不会这样做。

tabControl1.SelectedIndexChanged += new EventHandler(tabControl1_SelectedIndexChanged);
于 2008-11-25T21:25:54.730 回答
0

如果我理解你的问题,它似乎类似于我最近在C#/.NET2.0 中的 DataGridViews上的这个线程中遇到的问题

尝试调用:

libDataGrid.Invalidate();

这应该强制 Windows 重绘您的控件。无需重新附加数据源并刷新。(我认为您可以放心地注释掉这两行。)

另外: 你得到的例外是什么?

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

于 2008-11-25T21:27:27.583 回答