1

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の長さが初期化時に設定されていないためです。

4

3 に答える 3

3

私は質問に少し混乱していますが、ここにいくつかの考えがあります:

  1. DataGridViewAutoGenerateColumnsプロパティがあります。独自の列を作成したくない場合は、これをfalseに設定します
  2. 既存の列にバインドするには、DataPropertyNameそれぞれにを設定する必要があります
  3. DataGridView(を使用する任意のリストコントロールを使用するcmomonでは)は、空のリストでもメタデータを取得できるため、(一部の!= )TypeDescriptorよりも非常に優先されます。一般に、2.0では使用は間違いです。List<T>TobjectArrayListArrayList
于 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にコントロールの再描画が強制されます。データソースを再接続して更新する必要はありません。(この2行は安全にコメントアウトできると思います。)

また: あなたが受けていた例外は何でしたか?

また、「データソース構成ウィザード」を使用してdataGridViewを支援しましたか?

于 2008-11-25T21:27:27.583 に答える