我有gridview控件,上面有一个复选框
当我点击保存按钮时,我能够找到已经检查过的复选框,我能够做到这么好但问题是:
如果用户尝试取消选中复选框,那么我将如何跟踪更改并将其保存到已检查的数据库中。 anyhelp?..所以在这方面我已经创建了两个比较列表...希望我在这里有意义。
我想比较两个列表,如果有任何更改,则保存其他....做某事......
<asp:TemplateField HeaderText="Select"> <ItemTemplate>
<asp:CheckBox ID="chkSelected" runat="server" Checked="false"></asp:CheckBox>
</ItemTemplate> </asp:TemplateField>
List<Employee> listFromDB = new List<Employee>();
listFromDB = EmployeeListFromDB ; //loads the list
List<Employee> selectedEmployee = new List<Employee>();
selectedEmployee = MySelectedEmployee //loads the list
//Employee object looks like this:
id
name
这就是我遇到的问题,这就是我正在做的事情......
foreach (Employee item in MySelectedEmployee )
{
bool _flag = false;
_flag = EmployeeService.SaveEmployee(item.Id, item.Name);
}
答案 0 :(得分:2)
你想要这样的东西:
var diff = selectedEmployee.Except(listFromDb, (a,b)=>a.id==b.id);
foreach (Employee e in diff)
{
EmployeeService.SaveEmployee(e.Id, e.Name);
}
但你的细节很糟糕。什么定义了变化?如何匹配列表中的项目:按ID?你能更准确地了解你的要求吗?
答案 1 :(得分:0)
这样的事情应该有效:
foreach (Employee item in MySelectedEmployee )
{
var currentEntry = listFromDB.FirstOrDefault( x => x.id == item.id);
if(currentEntry == null || currentEntry.name!= item.name)
{
bool _flag = EmployeeService.SaveEmployee(item.Id, item.Name);
...
}
}
请注意,您的初始化List<Employee>
是不必要的,因为无论如何您都会在下一行重新分配变量。
答案 2 :(得分:0)
听起来你需要的是设置操作。你有几个选择:
.NET 4.0 - HashSet&lt; T&gt;
http://msdn.microsoft.com/en-us/library/bb359438.aspx
.NET 3.5 - Linq扩展
Linq to Objects扩展包含一些设置操作,如Intersect和Union。 http://msdn.microsoft.com/en-us/library/system.linq.enumerable.aspx
.NET 2.0 - SetList&lt; T&gt;
在2.0中,你需要手动滚动类似下面的SetList类。 http://csharptest.net/browse/src/Library/Collections/SetList.cs (online-help)
使用SetList:
SetList<Employee> listFromDB = new SetList<Employee>(EmployeeListFromDB);
SetList<Employee> selectedEmployee = new SetList<Employee>(MySelectedEmployee);
SetList<Employee> removed = listFromDB.SubtractSet(selectedEmployee);
SetList<Employee> added = selectedEmployee.SubtractSet(listFromDB);
注意:员工必须实现IComparable&lt; Employee&gt;,或者您应该编写IComparer&lt; Employee&gt;并将它提供给上面的SetList构造函数调用。
答案 3 :(得分:0)
以下是您的行为:
List<Employee> found = EmployeeListFromDB.FindAll(a=>!selectedEmployee.Exists(b=>a.Id == b.Id));
多数民众赞成......