我有一个Windows窗体DataGridView,其中我有数据和每行的复选框。
我将选中特定行的复选框,所有选定的行将填入另一页。
if (grdEmp.Rows.Count > 0)
{
var selectedEmpIDs= from DataGridViewRow coll in grdEmp.Rows
where Convert.ToBoolean(coll.Cells["Select"].Value) == true
select coll;
if (selectedEmpIDs.Count() > 0)
{
foreach (DataGridViewRow row in selectedEmpIDs)
{
selectedEmp+= row.Cells["EmpId"].Value + ",";
}
}
}
这仅适用于一页。
当我导航到另一个页面,然后单击所选行时,前一个页面就会消失。
我该如何解决。
由于 cmrhema
注意:对于这种混淆感到抱歉,当我认为它适用于某个页面时,我的意思是分页。
我想我需要添加更多输入,
gridview中有10页。
我通过点击下一页(页面下一页按钮)一个接一个地从gridview的每个页面中选择第一条记录。
但只有最后选择的记录才会显示,其他记录会被忽略。
什么是prblm
答案 0 :(得分:0)
您可以使用Program.cs或使用静态类全局使用List或Dictionary或任何其他集合类型。并在离开页面之前将所选行存储到列表中。
答案 1 :(得分:0)
您可以使用List而不是使用逗号分隔的字符串字符串作为ID列表。
您的代码将变成这样:
if (grdEmp.Rows.Count > 0)
{
var selectedEmpIDs= from DataGridViewRow coll in grdEmp.Rows
where Convert.ToBoolean(coll.Cells["Select"].Value) == true s
select coll;
if (selectedEmpIDs.Count() > 0)
{
foreach (DataGridViewRow row in selectedEmpIDs)
{
if (!listOfIds.Contains((int)row.Cells["EmpId"].Value))
{
listOfIds.Add(((int)row.Cells["EmpId"].Value));
}
}
}
}
您需要从此列表中删除项目的方法,因此为复选框选择的事件添加事件处理程序可能会更好。
List对象本身可以简单地作为包含DataGridView的表单的类级对象。
如果您在表单之间管理分页,这会变得有点复杂,但是维护选定ID列表的原则相同。