我遇到了一个问题,即根据数据表值在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;
}
}
}
答案 0 :(得分:0)
我回答了我自己的问题,因为我不认为这可能会在表单加载时出现问题。我的应用程序有一个用于向项目添加选择的表单。当用户想要编辑'在项目中,我需要调用此表单并进行所有以前的选择,以便用户可以添加/删除。 当使用启用了多选的DataGridView(DGV)时,在运行时,您可以点击'并选择多个项目...基本上我试图在代码中重新创建此行为,在表格加载中编辑'模式。 在初始化表单之后,我有一个从OleDb表加载DGV的方法,为了测试它,我尝试在加载方法调用之后添加以下行,并作为方法调用的最后几行:
dgv1.Rows[0].Selected = true;
dgv1.Rows[1].Selected = true;
dgv1.Rows[2].Selected = true;
显然,在表单加载方面,我期待前三行被选中,但这并没有发生。
但是,我记得一个单独的问题,如果没有默认选择的第一行,我永远无法加载DGV ......所以我放入了一个'刷新'按钮,只需调用'加载'方法再次...最后一行是:DGV1.Rows[0].Selected = False;
使用刷新按钮,DGV加载时不选择第一行。
我很好奇,如果这是一个类似的情况,所以当我在加载方法的末尾添加这3行时,表单加载没有任何反应......但是...当我点击'刷新'按钮,前3行被选中'。
我已经研究了这个超过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。另一方面,您必须跟踪或枚举所有行,以便在给定时间知道所有“选定”行。 - >标记 - > DataGridView程序管理器 - 2006
所以我的计划是按照建议重建DGV以使用复选框。我只想把它放在那里以获取一般信息和/或如果有人有更好的想法。感谢