0

我创建了一个字典

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

这里的部门是一个类,我有Id,Name and Code部门。并在bool上午发送此人是否HOD存在。

我正在将记录添加到此词典中,例如

dict.Add(department,chkHOD.checked);

此处记录已成功添加到 Dictionary 中,之后将 Dictionary 绑定到 GridView 之类的

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

现在插入的记录在gridview中显示得很好。在此之后,我将这些记录存储在我数据库的“StaffDepartments”表中。我在“Staffdepartments”表中有 3 列

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

这里记录在数据库中存储良好。将记录添加到数据库中没有问题。

我在这里有一些问题

* 1.如何在添加之前检查DepartmentId是否已经存在于Dictionary中。2.在编辑人员详细信息时,如何通过选中 Gridview 行中的复选框从字典中删除选定部门。(这里的记录来自数据库,所以当我单击删除按钮时,记录应该在数据库中删除以及) *

如果它是一个列表而不是字典,我可以通过

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);

但这里有些不对劲。如果您的真正键是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 回答