我们的windows窗体在第一列中有一个带有DataGrIDVIEwCheckBoxColumn的DataGrIDVIEw.
我们添加了以下功能,允许用户切换 – >单击以选择此网格中的多个行:
int colHit = gvlibrary.HitTest(e.X,e.Y).ColumnIndex; int lastRowHit; //mouse left click if (e.button == Mousebuttons.left) { if (colHit == 0) { if (Control.ModifIErKeys == Keys.Shift) { lastRowHit = gvlibrary.HitTest(e.X,e.Y).RowIndex; ShiftClickCheckBoxSetter(this.gvlibrary,int.Parse(txtFirstClickRow.Text),lastRowHit); } else { int firstRowHit = gvlibrary.HitTest(e.X,e.Y).RowIndex; txtFirstClickRow.Text = firstRowHit.ToString(); } } }
这是CheckBoxSetter代码:
private voID ShiftClickCheckBoxSetter(DataGrIDVIEw dataGrIDVIEw,int p,int lastRowHit) { if (p < lastRowHit) { for (int i = p; i < lastRowHit; i++) { dataGrIDVIEw.Rows[i].Cells[0].Value = true; } } else// { for (int i = p; i >= lastRowHit; i--) { dataGrIDVIEw.Rows[i].Cells[0].Value = true; } } }
这是按预期工作的.
我们还为控件添加了一个ContextMenuStrip,用于右键单击事件.
else if (e.button == Mousebuttons.Right) { if (colHit != 0) { ContextMenuStrip m = new ContextMenuStrip(); m.Items.Add("Select All",null,m_libraryItemClicked); m.Items.Add("Select None",m_libraryItemClickednone); m.Show(gvlibrary,e.Location); } }
代表活动一:
voID m_libraryItemClicked(object sender,EventArgs e) { foreach (DataGrIDVIEwRow dgvr in gvlibrary.Rows) { if (dgvr.Selected) { dgvr.Selected = false; } dgvr.Cells["LSelect"].Value = true; } }
代表事件二:
private voID m_libraryItemClickednone(object sender,EventArgs e) { foreach (DataGrIDVIEwRow dgvr in gvlibrary.Rows) { if (dgvr.Selected) dgvr.Selected = false; dgvr.Cells["LSelect"].Value = false; } }
这允许用户选择全部或选择无复选框.
选择“全选”选项后,将选中所有复选框:
但是,选择“选择无”选项时:
取消选中所有复选框,但在Shift-Click事件中选中的最后一个复选框除外:
我认为迭代所有GrID Rows并将复选框设置为未选中就足够了,IE:
private voID m_libraryItemClickednone(object sender,EventArgs e) { foreach (DataGrIDVIEwRow dgvr in gvlibrary.Rows) { if (dgvr.Selected) dgvr.Selected = false; dgvr.Cells["LSelect"].Value = false; } }
但是,似乎有某种状态属性禁止在该行中的此复选框进行更改.
提前致谢.
解决方法 我检查了你的代码,可以重现这种行为.问题似乎与当前单元格(不是选定的单元格)有关.当您尝试更改此特定单元格时, *** 作不会立即执行.要更改此行为,请添加dataGrIDVIEw1.CurrentCell = null;在更改“LSelect”单元格的值之前.这应该可以解决您的问题.
private voID m_libraryItemClickednone(object sender,EventArgs e){ dataGrIDVIEw1.CurrentCell = null; foreach (DataGrIDVIEwRow dgvr in gvlibrary.Rows) { if (dgvr.Selected) dgvr.Selected = false; dgvr.Cells["LSelect"].Value = false; }}总结
以上是内存溢出为你收集整理的c# – Windows窗体 – > DataGridView-> DataGridViewCheckBoxColumn取消选中所有留下的一件物品已检查全部内容,希望文章能够帮你解决c# – Windows窗体 – > DataGridView-> DataGridViewCheckBoxColumn取消选中所有留下的一件物品已检查所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)