VS2008で使用しているdatagridview要素に問題があります。このDataGridViewは、実際にはTabControl要素のタブです。
私が作ったコスタムオブジェクトからの要素で満たす必要がある5つの列を与えました。
これは基本的に、メインクラスとそれから派生したいくつかのクラスを含む小さなライブラリアプリケーションです。それらはすべて、データをデータグリッドビューに入力するために必要な値を含むキーワードの文字列として表すToString()メソッドを持っています。
最初の5つだけが必要ですが、一部のオブジェクトには最大12のキーワードがあります。現在、オブジェクトを追加するたびに、データグリッドはそれ自体を埋めません。代わりに、特定のオブジェクトが持つキーワードの量に等しい列の量を追加します。
私が現在していることはこれです:
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には、すべての派生クラスの要素を含めることができますが、それらはすべて接続されているため、文字列表現には、グリッドを埋めるために必要な要素が常に含まれます。
最初の5つだけをフィルタリングして、正しい列に配置する方法がわかりません。
そして別のこと。現在、DataGridViewをクリックしてのみ更新できます。タブコントロールの特定のタブに切り替えると、オンに変わるはずです。
SelectedIndexChangedの引数を追加しようとしましたが、実際には何もしません...または、少なくとも、何もしないようです。
つまり、上記のコードをコメントアウトして、代わりにこれを追加しました。
public void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
libDataGrid.DataSource = this.manager.Lib.LibList;
libDataGrid.Refresh();
}
これにより、タブが変更されるたびに、どちらに関係なく、タブが更新されます。例外が発生したため、ifステートメントを削除する必要がありました。おそらく、ArrayListの長さが初期化時に設定されていないためです。