单元格设置成CheckBox,点击两次才能选上
我要实现反选的功能。单击列头,选中所有行;选中所有行的情况下,自动勾选列头;若某行被勾选,则不勾选列头或取消勾选列头;
private void FpUserRoleManageCellClick(object sender, CellClickEventArgs e)
{
if (e.ColumnHeader && e.Column == 0)
{
bool chk = false;
if (this.fpUserRoleManage_Sheet1.ColumnHeader.Cells.Value != null)
{
bool.TryParse(this.fpUserRoleManage_Sheet1.ColumnHeader.Cells.Value.ToString(), out chk);
}
this.fpUserRoleManage_Sheet1.ColumnHeader.Cells.Value = !chk;
for (int i = 0; i < fpUserRoleManage_Sheet1.RowCount; i++)
{
if (this.fpUserRoleManage_Sheet1.Cells.Value == null)
{
break;
}
this.fpUserRoleManage_Sheet1.Cells.Value = !chk;
}
}
else if (e.Column == 0)
{
bool rowChecked = Convert.ToBoolean(fpUserRoleManage.ActiveSheet.Cells.Value);
fpUserRoleManage.ActiveSheet.Cells.Value = !rowChecked;
bool allChecked = true;
for (int i = 0; i < fpUserRoleManage_Sheet1.RowCount; i++)
{
bool isChecked = Convert.ToBoolean(fpUserRoleManage.ActiveSheet.Cells.Value);
if (!isChecked)
{
allChecked = false;
break;
}
}
fpUserRoleManage.ActiveSheet.ColumnHeader.Cells.Value = allChecked;
}
我的代码是这个,反向选选择的时候,需要点两次才能勾选上。这是farpointSpread内部逻辑的问题吗
本人已解决:) 请直接上传一个重现问题的demo,我帮你看看原因 else if (!e.ColumnHeader && e.Column == 0)
{
bool allRowsChecked = true;
int checkedRowCount = 0; // 记录已勾选的行数
for (int i = 0; i < fpUserRoleManage_Sheet1.RowCount; i++)
{
if (this.fpUserRoleManage_Sheet1.Cells.Value == null)
{
break;
}
if (Convert.ToBoolean(this.fpUserRoleManage_Sheet1.Cells.Value))
{
checkedRowCount++;
}
else
{
allRowsChecked = false;
}
}
// 更新列头复选框的状态
this.fpUserRoleManage_Sheet1.ColumnHeader.Cells.Value = checkedRowCount == fpUserRoleManage_Sheet1.RowCount;
}
我又调整了一下我代码,当最后一行选中时,列头并未自动更新,需要单击一下其他行的列头,才会将ColumnHeader勾上;需要再取消勾选一行,才会将ColumnHeader的勾选去掉 请上传一个能说明问题的demo,我帮你看看原因,直接看代码的话不好重现问题判断原因 我上传了一个视频。另外
private void InitFp()
{
Hsp.Core.NetFrame.UI.Utils.FpUtils.FarPointStyle(this.fpUserRoleManage);
this.fpUserRoleManage_Sheet1.ColumnHeader.Rows.Height = 30F;
this.fpUserRoleManage_Sheet1.Rows.Default.Height = 25;
this.fpUserRoleManage_Sheet1.Rows.Default.VerticalAlignment = CellVerticalAlignment.Center;
this.fpUserRoleManage_Sheet1.ColumnHeader.Rows.Font = new Font("微软雅黑", 13.5F, FontStyle.Bold);
this.fpUserRoleManage_Sheet1.OperationMode = OperationMode.Normal;
this.fpUserRoleManage_Sheet1.ColumnHeader.Rows.Get(0).Height = 40F;
this.fpUserRoleManage_Sheet1.ColumnHeader.Cells.CellType = new FarPoint.Win.Spread.CellType.CheckBoxCellType();
this.fpUserRoleManage_Sheet1.Columns.BackColor = Color.AliceBlue;
this.fpUserRoleManage_Sheet1.Columns.BackColor = Color.AliceBlue;
this.fpUserRoleManage_Sheet1.Columns.BackColor = Color.AliceBlue;
this.fpUserRoleManage_Sheet1.Columns.BackColor = Color.AliceBlue;
}
private void InitEvent()
{ fpUserRoleManage.CellClick += FpUserRoleManageCellClick;
}
private void FpUserRoleManageCellClick(object sender, CellClickEventArgs e)
{
if (e.ColumnHeader && e.Column == 0)
{
bool chk = false;
if (this.fpUserRoleManage_Sheet1.ColumnHeader.Cells.Value != null)
{
bool.TryParse(this.fpUserRoleManage_Sheet1.ColumnHeader.Cells.Value.ToString(), out chk);
}
this.fpUserRoleManage_Sheet1.ColumnHeader.Cells.Value = !chk;
for (int i = 0; i < fpUserRoleManage_Sheet1.RowCount; i++)
{
if (this.fpUserRoleManage_Sheet1.Cells.Value == null)
{
break;
}
this.fpUserRoleManage_Sheet1.Cells.Value = !chk;
}
}
else if (!e.ColumnHeader && e.Column == 0)
{
bool allRowsChecked = true;
int checkedRowCount = 0; // 记录已勾选的行数
for (int i = 0; i < fpUserRoleManage_Sheet1.RowCount; i++)
{
if (this.fpUserRoleManage_Sheet1.Cells.Value == null)
{
break;
}
if (Convert.ToBoolean(this.fpUserRoleManage_Sheet1.Cells.Value))
{
checkedRowCount++;
}
else
{
allRowsChecked = false;
}
}
// 更新列头复选框的状态
this.fpUserRoleManage_Sheet1.ColumnHeader.Cells.Value = checkedRowCount == fpUserRoleManage_Sheet1.RowCount;
}
}
这是我事件的Demo。
你可以自己先调试看看,选中最后一个复选框,以及取消选中时checkedRowCount是怎么变化的。 Richard.Ma 发表于 2023-3-22 18:26
你可以自己先调试看看,选中最后一个复选框,以及取消选中时checkedRowCount是怎么变化的。
我点击最后一个复选框,进入到调试,checkedRowCount为3,最后一行的value也为false Richard.Ma 发表于 2023-3-22 18:26
你可以自己先调试看看,选中最后一个复选框,以及取消选中时checkedRowCount是怎么变化的。
CheckBox的状态怎么才能做到实时提交呢 我看到你这个是写在CellClick 事件中的,那么肯定是要比CheckBox状态变更早的。
你要判断值变化的话,可以尝试用cellchange事件看看
页:
[1]
2