0

次のような辞書を作成しました

Dictionary<Department,bool> dict= new Dictionary<Department,bool>();

ここで部門はクラスであり、私はId,Name and Code部門のために持っています。そして、boolその人がいるかどうかを送信してHODいます。

このディクショナリに次のようにレコードを追加しています

dict.Add(department,chkHOD.checked);

ここでは、レコードがディクショナリに正常に追加され、その後、ディクショナリを次のように GridView にバインドしています

gridDept.Datasource=dict;
gridDept.Databind();

挿入されたレコードがグリッドビューに正常に表示されるようになりました。この後、このレコードをデータベースの「StaffDepartments」テーブルに保存しています。「Staffdepartments」テーブルに 3 つの列があります

1.StaffId(PK - has link with the Staff table)
2.DepartmentId(PK - has link with the Department table)
3.IsHOD.

ここで、レコードはデータベースに正常に保存されます。レコードをデータベースに追加しても問題ありません。

ここでいくつか質問があります

* 1.追加する前に、Dictionary に DepartmentId が既に存在するかどうかを確認する方法。2. スタッフの詳細を編集しているときに、Gridview 行のチェックボックスをオンにして、選択した部門をディクショナリから削除する方法を教えてください。も) *

ディクショナリではなくリストの場合、次の方法で DepartmentId を取得できます

int departmentId = (int)gridDept.DataKeys[row.RowIndex].Values["DepartmentId"];

しかし、ディクショナリでは、キーと値のペアで同じことを行う方法がわかりません....誰もここで私を助けてくれますか.

4

1 に答える 1

1

追加する前に、DepartmentId が Dictionary に既に存在するかどうかを確認するにはどうすればよいですか。

これを使用できます:

if (!dict.Keys.Any(d => d.DepartmentId == department.DepartmentId))
    dict.Add(department,chkHOD.checked);

しかし、ここで何かが間違っています。実際のキーが(オブジェクト ID)DepartmentIdではなく、Departmentそれを辞書のキーにする必要があります。たとえば、ヘルパー クラスを次のように定義できます。

public class DepartmentBindingHelper
{
    public int DepartmentId { get; set; }
    public Department Department { get; set; }
    public bool Checked { get; set; }
}

次に、次のように辞書を定義します。

var dict = new Dictionary<int, DepartmentBindingHelper>();

そして、この方法でオブジェクトを辞書に追加します。

if (!dict.ContainsKey(department.DepartmentId))
    dict.Add(department.DepartmentId, new DepartmentBindingHelper
    {
        DepartmentId = department.DepartmentId,
        Department = department,
        Checked = chkHOD.checked
    });

次に、値のコレクションのみをグリッドにバインドできます。

gridDept.Datasource = dict.Values;// it's an IEnumerable<DepartmentBindingHelper>
gridDept.Databind();

行からを取得するコードは、DepartmentId変更しなくても機能します。

int departmentId = (int)gridDept.DataKeys[row.RowIndex].Values["DepartmentId"];
于 2012-04-17T13:53:27.860 に答える