DataTableソースに関連付けられたDataGridViewがあります。テーブル内の要素のデータの中には、私が隠しておきたいGuidがあります。以下のように(。それは、参考のために内部的に使われていますが、表示されるべきではありません)私はテーブルを作成するために使用しているコードは次のとおりです。DataGridViewの非表示の列が非表示になっていません。
private DataTable mEntities = new DataTable();
private System.Windows.Forms.DataGridView EntitiesGridView;
これらは参考のためにここに示し、他の場所で宣言されています。
private void BuildEntityTable()
{
mEntityTable.Columns.Add("id", typeof(Guid));
mEntityTable.Columns.Add("Name", typeof(string));
... (some other columns)
foreach (Foo foo in mEntities)
{
DataRow row = mEntityTable.NewRow();
row["id"] = foo.id;
row["Name"] = foo.Name;
... (rest of data)
mEntityTable.Rows.Add(row);
}
DataColumn[] entityKeys = new DataColumn[1];
entityKeys[0] = entityTable.Columns["id"];
mEntityTable.PrimaryKey = entityKeys;
EntitiesGridView.DataSource = mEntityTable.DefaultView;
EntitiesGridView.Columns["id"].visible = false;
}
これまでのところとても良いです。テーブルが作成され、目に見える "id"カラムはありません。しかし、後でテーブルに新しいオブジェクトを追加すると、問題が発生します。コードはほぼ同じです:
何らかの理由で、これにより「id」列が戻ってきます。私は前のコードからEntitiesGridView.Columns["id"].visible = false;
行をコピーしようとしましたが、うまくいきません。この点の後に私がしていることは、その列を消してしまいます。私が欠けていることの手がかりは?
なぜあなたはmEntitiesとmEntityTableの両方を持っていますか?あなたのように、datagridviewにバインドされたデータテーブルを作成しようとすると、新しい行を追加しても問題は再現されませんでした。エラーを再現する最小限の例を提供するかもしれません。実際には、問題を自分で見つけるかもしれません。また、AddNewObjectはどこから呼び出されますか?私はそれが他のスレッドからロックであると思いますか?問題に寄与する疑いがありますが、あなたが示した以上に少しは進んでいるようです。 –
DataTableはPropertyGridの塗りつぶしに使用されます。 DataGridViewにはDataTableのキー値がいくつか表示され、PropertyGridにはすべての値が表示されます。 (いくつかのケースでは数十人)。物事を混乱させる可能性があるので、私が投稿しなかったことがここで増えています。ここの「Foo」は、実際にはランタイム時に派手なPropertyDescriptorのもので動的に生成されるカスタムクラスです。 AddNewObjectは、ネットワーク上でデータを受け取るXml Parserによって呼び出され、新しいオブジェクトをオンザフライで作成します。私はそれが私がしかし持っている問題に関連していると私はそれをすべて投稿した場合、あまりにも多くのコードになると思う。 –
公正な呼び出しは、これに影響を与えない余分なもののように聞こえます。私が言ったように、ボタンイベントハンドラ内のデータテーブルに追加するだけの簡単な例は問題を再現しません。私が考えることができるのは、このフォーラムスレッドで議論されている問題です。http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/19841219-f1fc-454b-a019-097529a211e1/ –