踩坑日记 | DevExpress GridView.GetSelectedRows方法返回无效的RowHandle行号|C/S开发框架
作者:csframework|C/S框架网  发布日期:2023/08/24 20:11:15

踩坑日记 | DevExpress GridView.GetSelectedRows方法返回无效的RowHandle行号|C/S开发框架

场景重现

开发环境:VS2022+DevExpress v22.2.3

.NET版本:.NET7

表格中一个列分组后,勾选了3条记录,调用 GridView.GetSelectedRows方法会返回 4 个 RowHandle(4条记录),其中一条记录的RowHandle值=-4,下图蓝色圈

踩坑日记 | DevExpress GridView.GetSelectedRows方法返回无效的RowHandle行号|C/S开发框架

解决方案

扩展一个新方法:

C# 全选
/// <summary>
        /// 获取勾选的行有效行号(RowHandle>=0),行号去重。
        /// </summary>
        /// <param name="gv"></param>
        /// <returns></returns>
        public static int[] GetSelectedRowHandles(this GridView gv)
        {
            var rows = gv.GetSelectedRows();
            return rows.Where(w => w >= 0).Distinct().ToArray();
        }

使用:

踩坑日记 | DevExpress GridView.GetSelectedRows方法返回无效的RowHandle行号|C/S开发框架

C# 全选
/// <summary>
        /// 关闭窗体返回当前选择的记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOk_Click(object sender, EventArgs e)
        {
            if (gvDetail.RowCount == 0) return;
            try
            {
                var rows = gvDetail.GetSelectedRowHandles();
                if (rows.Length == 0)
                {
                    Msg.Warning("请勾选记录,然后【确认】");
                    gvDetail.Focus();
                    gvDetail.FocusedColumn = gvDetail.VisibleColumns[0];
                    return;
                }
                foreach (var v in rows)
                {
                    _Result.Add(gvDetail.GetObject<res_PFSummary>(v));
                }

                this.Close();
            }
            catch (Exception ex)
            {
                Msg.ShowException(ex);
            }
        }

C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务
上一篇 下一篇