FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 4621|回复: 6
打印 上一主题 下一主题

【经验分享】当数据为空时的一个错误

[复制链接]
跳转到指定楼层
楼主
发表于 2015-10-24 08:11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果绑定数据为空,会导致一个错误。
位置:
pagebase.CS
方法:GetSelectedDataKeyID

修改后的代码:

  1.         protected int GetSelectedDataKeyID(Grid grid)
  2.         {
  3.             int id = -1;
  4.             if (grid.Rows.Count>0)
  5.             {
  6.                 int rowIndex = grid.SelectedRowIndex;
  7.                 if (rowIndex >= 0)
  8.                 {
  9.                     id = Convert.ToInt32(grid.DataKeys[rowIndex][0]);
  10.                 }
  11.             }
  12.             return id;
  13.         }

  14.         protected string GetSelectedDataKey(Grid grid, int dataIndex)
  15.         {
  16.             string data = String.Empty;
  17.             if (grid.Rows.Count > 0)
  18.             {
  19.                 int rowIndex = grid.SelectedRowIndex;
  20.                 if (rowIndex >= 0)
  21.                 {
  22.                     data = grid.DataKeys[rowIndex][dataIndex].ToString();
  23.                 }
  24.             }
  25.             return data;
  26.         }
复制代码


沙发
发表于 2015-10-26 21:54:33 | 只看该作者
请详细说明,怎么个错误法?
板凳
发表于 2015-10-28 16:08:24 | 只看该作者
哈哈,正好我也发现了这个问题.
并且已经修改好了.
地板
发表于 2015-10-28 16:12:23 | 只看该作者
sanshi 发表于 2015-10-26 21:54
请详细说明,怎么个错误法?

这个是主要发生在某类数据不存在,然后又要和其他数据进行关联的时候.
比如说:职称用户管理,部门用户管理,角色用户管理,角色权限管理

并且引发错误的代码都在这些页面后台程序的 BindGrid2 里面
原来的代码如下:
  1. int deptID = GetSelectedDataKeyID(Grid1);

  2.                 if (deptID == -1)
  3.                 {
  4.                     Grid2.RecordCount = 0;

  5.                     Grid2.DataSource = null;
  6.                     Grid2.DataBind();
  7.                 }
  8.                 else
  9.                 {
  10.                     // 查询 X_User 表
  11.                     IQueryable<User> q = DB.Users.Include(u => u.Dept);

  12.                     // 在用户名称中搜索
  13.                     string searchText = ttbSearchUser.Text.Trim();
  14.                     if (!String.IsNullOrEmpty(searchText))
  15.                     {
  16.                         q.Where(u => u.Name.Contains(searchText));
  17.                     }

  18.                     q = q.Where(u => u.Name != "admin");

  19.                     // 过滤选中部门下的所有用户
  20.                     q = q.Where(u => u.Dept.ID == deptID);

  21.                     // 在查询添加之后,排序和分页之前获取总记录数
  22.                     Grid2.RecordCount = q.Count();

  23.                     // 排列和分页
  24.                     q = SortAndPage<User>(q, Grid2);

  25.                     Grid2.DataSource = q;
  26.                     Grid2.DataBind();
  27.                 }
复制代码


修改后的代码是这样:

  1. //不存在部门信息的情况下, 不继续后面的操作
  2.             if (Grid1.Rows.Count == 0)
  3.             {
  4.                 return;
  5.             }
  6.             else
  7.             {
  8.                 int deptID = GetSelectedDataKeyID(Grid1);

  9.                 if (deptID == -1)
  10.                 {
  11.                     Grid2.RecordCount = 0;

  12.                     Grid2.DataSource = null;
  13.                     Grid2.DataBind();
  14.                 }
  15.                 else
  16.                 {
  17.                     // 查询 X_User 表
  18.                     IQueryable<User> q = DB.Users.Include(u => u.Dept);

  19.                     // 在用户名称中搜索
  20.                     string searchText = ttbSearchUser.Text.Trim();
  21.                     if (!String.IsNullOrEmpty(searchText))
  22.                     {
  23.                         q.Where(u => u.Name.Contains(searchText));
  24.                     }

  25.                     q = q.Where(u => u.Name != "admin");

  26.                     // 过滤选中部门下的所有用户
  27.                     q = q.Where(u => u.Dept.ID == deptID);

  28.                     // 在查询添加之后,排序和分页之前获取总记录数
  29.                     Grid2.RecordCount = q.Count();

  30.                     // 排列和分页
  31.                     q = SortAndPage<User>(q, Grid2);

  32.                     Grid2.DataSource = q;
  33.                     Grid2.DataBind();
  34.                 }
  35.             }
复制代码


其他几个都这样改
5#
发表于 2015-10-28 16:15:22 | 只看该作者
主要是在进行操作之前,先加一个判断.
避免引发这类错误.
因为操作是基于必须有数据的基础上.
6#
 楼主| 发表于 2015-11-10 16:52:53 | 只看该作者
你不能保证一定有数据哈。
7#
 楼主| 发表于 2015-11-10 16:53:49 | 只看该作者
huxingz 发表于 2015-10-28 16:12
这个是主要发生在某类数据不存在,然后又要和其他数据进行关联的时候.
比如说:职称用户管理,部门用户管理, ...

你这个改的太辛苦了。我给的方案只要改一个地方哈。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-24 11:21 , Processed in 0.044856 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表