如何从不同页面获取DataGridView中的选定行

时间:2011-03-01 04:55:57

标签: c# winforms datagridview

我有一个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

2 个答案:

答案 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列表的原则相同。