gpt4 book ai didi

c# - Windows 窗体->DataGridView->DataGridViewCheckBoxColumn 取消选中所有留下一项选中

转载 作者:可可西里 更新时间:2023-11-01 14:23:11 24 4
gpt4 key购买 nike

我们在 Windows 窗体中遇到了一个我们似乎无法弄清楚的非常奇怪的问题。

我们的 Windows 窗体在第一列中有一个带有 DataGridViewCheckBoxColumn 的 DataGridView。

enter image description here

我们添加了以下功能,允许用户通过 shift-> 单击以选择此网格中的多行:

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;
}
}
}

这是按预期工作的。

enter image description here

我们还向控件添加了一个 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", null, m_LibraryItemClickedNone);
m.Show(gvLibrary, e.Location);
}
}

委托(delegate)事件一:

     void m_LibraryItemClicked(object sender, EventArgs e) {
foreach (DataGridViewRow dgvr in gvLibrary.Rows)
{
if (dgvr.Selected) {
dgvr.Selected = false;
}

dgvr.Cells["LSelect"].Value = true;
}
}

委托(delegate)事件二:

 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;
}
}

这允许用户为复选框选择全部或不选择。

Select All/Select None

选中“全选”选项时,所有复选框都被选中:

All Selected

However when the Select None option is selected:

Select None

除在 Shift-Click 事件中选中的最后一个复选框外,所有复选框都被取消选中:

All But One

我认为遍历所有网格行并将复选框设置为未选中就足够了,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;
}
}

然而,似乎有某种状态属性不允许更改该行中的该复选框。

提前致谢。

最佳答案

我检查了您的代码并可以重现此行为。问题似乎出在当前单元格(而不是所选单元格)上。当您尝试更改此特定单元格时,操作不会立即执行。

要更改此行为,请在更改“LSelect”单元格的值之前添加 dataGridView1.CurrentCell = null;。这应该可以解决您的问题。

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 取消选中所有留下一项选中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38021172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com