2011-01-19 33 views
2

現在、私のソースからのデータを表示するDataGridViewがあります。DataTabledt。ユーザーがセルをクリックして変更を加えたときに、変更が最終的にDataTableソースに保存されるように、編集できるようにしたいと思います。これまで私は試しました:DataGridView編集モード

dataGridView1.DataSource = dt; 
dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter; 

しかし、これは私がテーブル内の何かを編集することはできません。助言がありますか?

ありがとうございました。

答えて

3

私はプロジェクトと魔法のように、次の作品でこれを試してみたん:

public Form1() 
{ 
    InitializeComponent(); 

    var dt = new DataTable(); 
    dt.Columns.Add("Int", typeof(int)); 
    dt.Columns.Add("Double", typeof(double)); 

    var random = new Random(); 

    for(var i = 0; i < 50; i++) 
    { 
     dt.Rows.Add(random.Next(), random.NextDouble()); 
    } 

    dataGridView1.DataSource = dt; 
    dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter; 
} 

DGVするために行う特別な何も。私はちょうどツールボックスからフォームにドロップしました。私はDGV列をあらかじめ作成していませんでした。

私があなたの状況に対して提案できることは、主な解決策の外で問題を再現することです。他の場所でやっていることを再現してみてください。そして、うまくいけば、あなたを上回っているものが見つかるでしょう。データバインディングの前に独自のDGV列を作成する場合は、ReadOnlyのいずれかに設定されていないことを確認してください。

+0

これを試してみましたが、うまくいきました。編集は許可されています。しかし、私はちょっと別の方法で私のDataTableを読み込んでいます。最初にCSVファイルを解析し、dt.load()メソッドを使用してそのすべてを取得します。私のコードは次のとおりです。 (CachedCsvReader csv = new CachedCsvReader(新しいStreamReader(FrontierDump)、true、 '\ t')) { dt.Load(csv); } dt.TableName = "Frontier_DataTable"; DataView dv =新しいDataView(dt); dv.Sort = "order-id"; dt = dv.ToTable(); 私はそれが読み込まれている列と何か関係があると思います。 –

1

DataTable(アプリケーションが実行されているマシンのメモリ内)またはサーバーに保存しますか?

DataTableを意味し、DataGridViewがテーブルにバインドされている場合は、自動的に表示されているだけで、表示されません。これは、DataGridViewのRowLeaveイベントのデータテーブルでGetChanges()を呼び出して確認できます。

しかし、私はあなたが本当にソースデータベースに戻したいと思っていると思います。私は右推測している場合は、この記事を参照してください。http://social.msdn.microsoft.com/Forums/en/vbide/thread/5f8741dc-5874-46e7-8665-6bda3674bafd

編集 - 追加されたコメント

に基づいてチェックしてみてくださいすることがいくつかあります。

まず、楽しいために、EditOnEnterではなく、EditModeをEditOnKeystrokeに設定します。

また、.Enabledプロパティがtrueに設定され、.Enabledがfalseに設定されている別のコントロール(Panelなど)に含まれていないことを確認します。

また、ReadOnlyプロパティがfalseに設定されていることを確認します。

また、CanFocusをtrueに設定する必要があります。

私がリストアップしたもののほとんどはデフォルトの設定なので、プロパティペインで太字の設定を探します。これはデフォルトのプロパティ値ではないことを示しています。

+0

現在、DataGridViewでテーブルを編集するだけで問題があります。上記のコードはうまくいかないようです。あなたはそれについて考えていますか? –

+0

私は間違いなくその質問を誤解していると思います。あなたはそれを物理的に覚えていますか?セルやタブをクリックしたときに入力する必要はなく、一時停止してからもう一度クリックする必要がありますか?あなたはそれに単に入力できるようにしたいですか? – David

+0

GridViewの内容を編集することはできますが、変更はDataTableに影響しませんか、またはフォーム上のコントロールの内容を編集できないなどの問題がありますか? – David

0

デザイナーを使用している場合は、列の設定中に3つのチェックボックスが表示されます。 追加を許可する 編集を許可する 削除を許可する グリッドが読み取り専用で表示されているため、いずれもチェックしていないと思われます。

また、列に読み取り専用を設定しているかどうかを確認してください。

関連する問題