2009-09-14 59 views
5

この設定がコントロール自体に影響することを期待していましたが、AllowUserToAddRowsがtrueに設定されたDataGridViewを持つだけでは新しい行を追加できないようです。私はマウスとキーボードを使用しているだけで、このプロパティを完全に誤解していますか?私はそれが後者だと思うが、文書の方法で私を正しい方向に向けることができない。DataGridView - AllowUserToAddRowsの機能は何ですか?

編集:ところで、それは私がゴミではない、それはDataGridViewのDataSourceとしてListを使うことと関係があると思われる。リストにバインドすると小さな「*」は表示されません。

答えて

4

を見てみましょう - リストは、いくつかの非常に奇妙な行動を持っているようですDataSourceとして使用されたとき(同じように解決された私の最近の他の質問を参照)。

これは、生成されたコードでありますが、私はすでに配列からのリストにそれを変更したいので、するBindingListはほとんど余分な手間です:)

2

EDIT

DataTable dt = new DataTable(); 
dt.Columns.Add("No", typeof(int)); 
dt.Columns.Add("Name"); 
dataGridView1.AllowUserToAddRows = true; 
dataGridView1.EditMode = DataGridViewEditMode.EditOnKeystroke; 
dataGridView1.DataSource = dt; 

、それを試してみてください。

は私がするBindingListに一覧からSTMTTRNを変更することでこれを解決しIBindingList

+0

私はあなたのコードを試して、それは働いたので、ありがとう:)しかし、私は実際には(これは唯一の違いです)データソースとしてリストを使用していますおそらく私の問題の原因です。リストが「行の追加」機能を動作させない理由を知っていますか? –

+0

** IBindingList **インターフェイスを実装しています。 – adatapost

0

私は同じ問題を抱えていました。

DGVデータソースとしてBindingSourceを使用し、BindingSourceプロパティAllowNew = Trueを設定して、問題を解決しました。

Dim binding As New BindingSource 
binding.DataSource = myList 
binding.AllowNew = True 
With DataGridView1 
    .AutoGenerateColumns = False 
    .DataSource = binding 
End With 
2

同じ問題私のためにも、そしてBindingListはそれを解決しませんでしたが、マーリンの答えは私の最終的な解決に向けたヒントを与えました。

BindingSourceにリストをラップすることは、解決策の重要な部分です(別の質問でも記載されています):Can't Allow User To Add Rows to DataGridView with List<> Datasource)。

私の場合、欠落していたステップは、のクラスに、私のリストのオブジェクトにパブリックパラメータレスコンストラクタがないことでした。パラメーターなしのコンストラクターを追加すると、AllowUserToAddRowsが正常に機能するようになりました。

私はマーリンの答えをしようとしたとき、のメッセージが、またAddingNewイベントを処理することにより、追加の行を有効にすることが可能であり得ることを示唆した例外から手掛かりを得た:

AddNewメソッドをすることはできませんMyType型で呼ばれます。このタイプには、 のパブリックデフォルトコンストラクタがありません。 AddingNewイベントを処理して適切なオブジェクトを作成する場合は、「MyType」タイプのでAddNewを呼び出すことができます。

幸いにも、パブリックなパラメータのないコンストラクタを追加することは問題ではありませんでしたが、パラメータのないコンストラクタを追加できない人にとっては、希望のメッセージです。

関連する問題