C#中实现DataGrid双向排序(转http://www.91d.cn/article/233/Article_19149_1.html)

本文介绍了一种在.NET框架中实现DataGrid双向排序的方法。通过在DataGrid.Attributes中存储排序参数并修改DataGridColumn的SortExpression属性,可以使得DataGrid支持升序和降序排序。该方法适用于需要自定义排序功能的开发者。

 在.Net 中 DataGrid 虽然有排序的功能,但并不支持双向的排序。用到了,看了些相关的帖子,自己尝试了一种方法,竟然也行得通,主要是用DataGrid.Attributes 存了一个参数,同时在onSortCommand中修改了DataGridColumn的SortExpression. 代码如下:

private void BindData()
{
 DataTable dt = .......;
 if(dt != null)
 {
  DataView dv = dt.DefaultView;
  if(DataGrid1.Attributes["SortBy"] != null)
  {
   dv.Sort = DataGrid1.Attributes["SortBy"];
  }

  DataGrid1.DataSource = dv;
  DataGrid1.DataBind();
 }
}

private void DataGridSort(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
 DataGrid1.Attributes["SortBy"] = sortstr;
 this.BindData();

 //找到排序的列,并修改把它的排序属性

 DataGridColumn clm = null;

 for(int i=0;i<DataGrid1.Columns.Count;i++)
 {
  if(DataGrid1.Columns[i].SortExpression == e.SortExpression )
  {
   clm = DataGrid1.Columns[i];
   break;
  }
 }

 if(clm == null) return;

 if(e.SortExpression.ToLower().IndexOf("desc") > 0)
 {
  clm.SortExpression = e.SortExpression.ToLower().Replace("desc","asc");
 }
 else
 {
  if(e.SortExpression.ToLower().IndexOf("asc") > 0)
  {
   clm.SortExpression = e.SortExpression.ToLower().Replace("asc","desc");
  }
  else
  {
   clm.SortExpression = e.SortExpression.ToLower() + " desc";
  }
 }

这个错误信息: ``` GET http://crmtest.haiwu.com/resources/js/base/datagrid-table2Excel_v3.js?webversion=1.0 net::ERR_ABORTED 404 (Not Found) ``` 表示浏览器尝试从服务器加载一个名为 `datagrid-table2Excel_v3.js` 的 JavaScript 文件,但请求被中止(`ERR_ABORTED`),因为服务器返回了 **HTTP 404(未找到)** 错误,说明该资源不存在。 --- ### 🔍 错误信息解析: | 错误部分 | 含义 | |----------|------| | `GET` | 浏览器向服务器发起的请求类型 | | `http://crmtest.haiwu.com/resources/js/base/datagrid-table2Excel_v3.js?webversion=1.0` | 请求的资源路径及版本参数 | | `net::ERR_ABORTED` | 请求被中止,可能是页面关闭、脚本中断等原因 | | `404 (Not Found)` | 服务器找不到请求的资源 | --- ### 🧨 可能原因: 1. **文件路径错误或拼写错误** - 路径 `/resources/js/base/datagrid-table2Excel_v3.js` 在服务器上不存在。 - 文件名可能有拼写错误(如 `datagrid-table2Excel_v3.js` 应为 `datagrid-table2excel_v3.js`)。 2. **文件未部署到服务器** - 本地开发时该文件存在,但在部署到测试服务器 `crmtest.haiwu.com` 时遗漏。 3. **缓存问题** - 浏览器缓存了旧的 HTML 文件,仍然尝试加载已删除或移动的 JS 文件。 4. **CDN 或外部资源失效** - 如果该 JS 文件是通过 CDN 引入的,可能 CDN 地址失效或文件已被移除。 5. **构建工具配置错误** - 使用 Webpack、Vite 等构建工具时,未正确配置资源输出路径。 6. **动态参数未正确处理** - URL 中的 `?webversion=1.0` 是缓存控制参数,通常不会影响 404,但如果服务器端有特殊处理逻辑可能会出错。 --- ### ✅ 解决方法: #### 1. **检查 HTML 中的脚本引用** ```html <script src="/resources/js/base/datagrid-table2Excel_v3.js?webversion=1.0"></script> ``` - 确认路径是否正确。 - 确保服务器上存在该路径和文件。 #### 2. **使用开发者工具查看请求详情** - 打开浏览器开发者工具(F12) → **Network** 标签。 - 查看该 JS 文件的请求详情: - **Status** 是否为 404。 - **Request URL** 是否正确。 - **Response Headers** 是否有 `Content-Type: text/html`(说明服务器返回的是 404 页面而非 JS 文件)。 #### 3. **检查服务器部署路径** - 登录服务器或查看部署目录,确认 `/resources/js/base/` 路径下是否存在 `datagrid-table2Excel_v3.js` 文件。 - 如果使用 Nginx/Apache,检查静态资源目录配置是否正确。 #### 4. **使用相对路径或绝对路径时注意上下文** ```html <!-- 相对路径 --> <script src="../js/base/datagrid-table2Excel_v3.js"></script> <!-- 绝对路径 --> <script src="/resources/js/base/datagrid-table2Excel_v3.js"></script> ``` #### 5. **防止加载失败阻塞页面** 可以使用动态加载脚本的方式,并添加错误处理: ```html <script> var script = document.createElement('script'); script.src = '/resources/js/base/datagrid-table2Excel_v3.js?webversion=1.0'; script.onerror = function() { console.error('脚本加载失败:', script.src); }; document.head.appendChild(script); </script> ``` --- ### 📌 示例:如何避免资源加载失败 ```html <!-- 带错误处理的脚本加载 --> <script> function loadScript(src) { return new Promise((resolve, reject) => { const script = document.createElement('script'); script.src = src; script.onload = resolve; script.onerror = () => reject(new Error(`Script load failed: ${src}`)); document.head.appendChild(script); }); } loadScript('/resources/js/base/datagrid-table2Excel_v3.js?webversion=1.0') .then(() => console.log('脚本加载成功')) .catch(err => console.error(err)); </script> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值