首页 文章

C#DataGridView多个选项被覆盖

提问于
浏览
0

我遇到了一个问题,根据数据表值在DataGridView(DGV)中以编程方式进行多项选择 . 我有一个带有一列“ID”的表,我需要将这些值传递给另一个带有DGV的表格进行编辑,ID也是第一个DGV列,即对于表中的每个ID,应该选择适当的DGV行 . 我可以循环遍历表格并且DGV很好,但是即使DGV属性MultiSelect = true也只选择了最后一个值...当我手动使用表格时,多个选择工作正常 .

foreach(DataRow dtrow in dt.Rows)
    {
        string Selection = dtrow["ID"].ToString();
        foreach(DataGridViewRow DGVrow in dgview.Rows)
        {                    
            if (DGVrow.Cells[0].Value.ToString().Equals(Selection))
            {
                dgview.CurrentCell = DGVrow.Cells[0];
                int cellInx = dgview.CurrentCell.RowIndex;
                dgview.Rows[cellInx].Selected = true;                                                                                      
                break;
            }
        }
    }

1 回答

  • 0

    我正在回答我自己的问题,因为我认为这不可能在表单加载上 . 我的应用程序有一个用于向项目添加选择的表单 . 当用户想要“编辑”项目时,我需要调用此表单并进行所有先前的选择,以便用户可以添加/删除 . 当使用启用了多选的DataGridView(DGV)时,在运行时,您可以'ctl-click'并选择多个项...实际上我正在尝试在代码中重新创建此行为,在'edit'中加载表单模式 . 初始化窗体后,我有一个从OleDb表加载DGV的方法,为了测试它,我尝试在加载方法调用之后添加以下行,并作为方法调用的最后几行:

    dgv1.Rows[0].Selected = true;
            dgv1.Rows[1].Selected = true;
            dgv1.Rows[2].Selected = true;
    

    显然,在表单加载时,我期待前3行为'selected',但是再次没有't happen. However, I remembered a separate issue, I could never get the DGV to load without the first line selected by default ... so I put in a '刷新' button, that simply calls the '加载'方法...最后一行是: DGV1.Rows[0].Selected = False; 使用刷新按钮加载DGV而不选择第一行 . 我很好奇,如果这是一个类似的情况,所以当我将这3行添加到加载方法的末尾时,表单加载没有任何反应......但是...当我按下'Refresh'按钮时,前3行是'selected' .

    我已经研究了这个超过3天,并从DataGridView项目经理(2006)发现了以下内容:https://social.msdn.microsoft.com/Forums/windows/en-US/cf351d44-4a9a-4c80-8d52-4fb349847908/multiple-select-is-not-working-for-datagridview?forum=winformsdatacontrols

    不幸的是,没有一个简单的解决方案,因为我没有看这个场景并设计网格来处理这个问题 . 主要问题源于以下事实:当您在网格上向下鼠标时,网格会设置当前单元格属性,该属性会在选择下一个单元格/行/列之前清除选择 . 因此,当您的代码行选择行时,当您选择下一行或只是使用键盘移动到下一行时,您选择的行将被清除 . 执行场景的最简单方法是通过RowPrePaint使用自定义绘制,并使用相同的SelectedBackground颜色绘制“选定”行 . 您可以只查询要绘制的行中的复选框单元格的值,以了解该行是否已“选中”,但不需要将Selected属性设置为true . 另一方面,您必须跟踪或枚举所有行,以便在给定时间知道所有“选定”行 . - > mark - > DataGridView程序管理器 - 2006

    所以我的计划是按照建议重建DGV以使用复选框 . 我只想把它放在那里以获取一般信息和/或如果有人有更好的想法 . 谢谢

相关问题