以较少代码实现DataGrid的排序,翻页,删除等功能【2】

本文介绍了一种将DataGrid组件的排序、翻页等功能模块化的实现方式,通过将按钮及样式定义分离到主题文件和母版页中,使得页面代码更加简洁。同时,通过基类实现了DataGrid控件的通用功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于上一篇,《以较少代码实现DataGrid的排序,翻页,删除等功能》具体实现的其他辅助代码在这儿,本篇的代码全是多个页面公用代码。
页面代码中,添加,删除,编辑这些按钮,以及DataGrid中的属性设置等HTML代码都去哪儿了呢?
DataGrid控件属性,提交按钮属性,删除按钮属性放到主题中去了。

下面是主题文件:Default.skin   -- 页面中,通过styleSheetTheme="Default"来设置主题。
<%--列表页面中的DataGrid--%>
<asp:datagrid SkinID="dgdList" BorderWidth="1px" PageSize="20" Width="98%" BorderColor="#0083B9" HorizontalAlign="Center" BorderStyle="Ridge"
CssClass
="tableGrid" AutoGenerateColumns="False" runat="server" AllowSorting="True" AllowPaging="True"
GridLines
="Horizontal" SelectedItemStyle-Wrap="false" SelectedItemStyle-CssClass="gridSelectedItem" 
EditItemStyle
-CssClass="gridEditItem" EditItemStyle-Wrap="false" 
AlternatingItemStyle
-CssClass="gridAltItem" AlternatingItemStyle-Wrap="false" 
ItemStyle
-CssClass="gridItem" ItemStyle-Wrap="false"
HeaderStyle
-CssClass="gridHeader" HeaderStyle-Wrap="false" 
FooterStyle
-CssClass="gridFooter" FooterStyle-Wrap="false" 
PagerStyle
-VerticalAlign="middle" PagerStyle-NextPageText="下一页" 
PagerStyle
-PrevPageText="上一页" PagerStyle-HorizontalAlign="Left" />

<%--提交按钮--%>
<asp:Button runat="server" Text="提     交" SkinID="Submit" />

<%--删除按钮--%>
<asp:Button runat="server" Text="删除" SkinID="Delete" />


而添加,删除,编辑按钮的HTML放到母版中了。
下面是母版ListMaster.master的代码:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="ListMaster.master.cs" Inherits="Master_ListMaster" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
<title>无标题页</title>

    
<script>
    
//  添加
    
//  作者:天志
    
//  创建日期:2007-9-15
    function Add()
    {
        window.location 
= GetTableName() + "_Add.aspx";
    }

    
//  编辑
    
//  作者:天志
    
//  创建日期:2007-9-15
    function Edit(frm)
    {
        var ret 
= checkSelect(frm);
        
if (ret == false)
        {
            
return false;
        }
        window.location 
= GetTableName() + "_Edit.aspx?" + GetQuery();
    }
    
    
//  列表编辑
    
//  作者:天志
    
//  创建日期:2007-9-15
    function EditList()
    {
        window.open(GetTableName() 
+ "_EditList.aspx");
    }

    
//  删除
    
//  作者:天志
    
//  创建日期:2007-9-15
    function Delete(frm)
    {
        var ret 
= checkDelete(frm);
        
if (ret == false)
        {
            
return false;
        }
    }

    
//  查看
    
//  作者:天志
    
//  创建日期:2007-9-15
    function View(frm)
    {
        var ret 
= checkSelect(frm);
        
if (ret == false)
        {
            
return false;
        }
        window.open(GetTableName() 
+ "_View.aspx?" + GetQuery());
    }

    
//  查询
    
//  作者:天志
    
//  创建日期:2007-9-15
    function Query()
    {
        window.location
=GetTableName() + "_Query.aspx";
    }

    
//  导出
    
//  作者:天志
    
//  创建日期:2007-9-15
    function Export()
    {
        window.open(
"http://www.cnblogs.com/Import/Export.aspx?tablename=" + GetTableName());
    }
    
</script>

</head>
<body>
    
<form id="form1" runat="server">
        
<table class="MenuTable">
            
<tr>
                
<td>
                
</td>
                
<td class="MenuTDAdd">
                    
<input onclick="return Add()" type="button" value="添 加">
                
</td>
                
<td class="MenuTDEdit">
                    
<input onclick="return Edit(this.form)" type="button" value="编 辑">
                
</td>
                 
<td class="MenuTDEdit">
                    
<input onclick="return EditList()" type="button" value="列表编辑">
                
</td>
                
<td class="MenuTDDelete">
                    
<asp:Button ID="btnDel" runat="server" SkinID="Delete" OnClick="btnDel_Click" OnClientClick="return Delete(this.form)" />
                
</td>
                
<td class="MenuTDView">
                    
<input onclick="return View(this.form)" type="button" value="查 看">
                
</td>
                
<td class="MenuTDQuery">
                    
<input onclick="return Query()" type="button" value="查询">
                
</td>
                
<td class="MenuTDExport">
                    
<input onclick="return Export()" type="button" value="导 出">
                
</td>
                
<td class="MenuRightTD">
                
</td>
            
</tr>
        
</table>
        
<br>
        
<div>
            
<asp:ContentPlaceHolder ID="DefaultContent" runat="server">
            
</asp:ContentPlaceHolder>
        
</div>
    
</form>
</body>
</html>

至于脚本Add(),Edit(frm)这里就不描述了。

还有,DataGrid中的排序,翻页,行设置哪儿去了?
放到了基类中了。
下面是基类的代码:
/// <copyright>天志(六子)  1999-2007</copyright>
/// <version>1.0</version>
/// <author>天志</author>
/// <email>Xumingxsh21@126.com</email>
/// <log date="2007-11-26">创建</log>

using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Text.RegularExpressions;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Web.UI;

/// <summary>
/// 列表页面基类
/// </summary>
public class BaseListPage : System.Web.UI.Page
{
  
protected BaseListPage ()
        : 
base()
    {        
    }

    
/// <summary>
    
/// Description:覆盖基类。
    
/// </summary>
    
/// <param name="e"></param>
    
/// <author>Xuming</author>
    
/// <log date="2007-12-11">创建</log>
    protected override void OnInit(EventArgs e)
    {
        
// 设置DataGrid的排序,分页事件
        if (InitialDataGridControl != null)
        {
            
this.InitialDataGrid(InitialDataGridControl);
        }

        
base.OnInit(e);
    }
    
    
/// <summary>
    
/// 设置DataGrid控件的分页,排序事件。
    
/// </summary>
    
/// <param name="dgdList"></param>
    protected void InitialDataGrid(DataGrid dgdList)
    {
        dgdList.PageIndexChanged 
+= new DataGridPageChangedEventHandler(DataGrid_PageIndexChanged);
        dgdList.ItemCreated 
+= new DataGridItemEventHandler(DataGrid_ItemCreated);
        dgdList.SortCommand 
+= new DataGridSortCommandEventHandler(DataGrid_SortCommand);
        dgdList.ItemDataBound 
+= new DataGridItemEventHandler(DataGrid_ItemDataBound);
    }

     
/// <summary>
    
/// 设置事件的DataGrid。
    
/// </summary>
    protected virtual DataGrid InitialDataGridControl
    {
        
get
        {
            
return null;
        }
    }

     
/// <summary>
    
/// 分页。
    
/// </summary>
    
/// <param name="source">DataGrid控件</param>
    
/// <param name="e">存储事件数据对象</param>
    
/// <author>天志</author>
    
/// <log date="2007-11-21">创建</log>
    protected virtual void DataGrid_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
        
    }

    
/// <summary>
    
/// 添加表头的排序标识。
    
/// </summary>
    
/// <param name="source">DataGrid控件</param>
    
/// <param name="e">存储事件数据对象</param>
    
/// <author>天志</author>
    
/// <log date="2007-11-21">创建</log>
    protected virtual void DataGrid_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
           
    }

    
/// <summary>
    
/// 排序。
    
/// </summary>
    
/// <param name="source">DataGrid控件</param>
    
/// <param name="e">存储事件数据对象</param>
    
/// <author>天志</author>
    
/// <log date="2007-11-21">创建</log>
    protected virtual void DataGrid_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
    {
        
    }

    
/// <summary>
    
/// 设置行格式。
    
/// </summary>
    
/// <param name="source">DataGrid控件</param>
    
/// <param name="e">存储事件数据对象</param>
    
/// <author>天志</author>
    
/// <log date="2007-11-21">创建</log>
    protected void DataGrid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
        
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            
// 获取每行的数据
            DataRowView drv = (DataRowView)e.Item.DataItem;
            
this.ItemDataBoundSet(sender, e, drv);
        }
    }
     
     
/// <summary>
    
/// 设置普通行的格式。
    
/// </summary>
    
/// <param name="sender">DataGrid控件</param>
    
/// <param name="e">存储事件数据对象</param>
    
/// <param name="drv">行数据</param>
    protected virtual void ItemDataBoundSet(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e, DataRowView drv)
    {
    }

     
/// <summary>
    
/// 取得DataGrid的数据源。
    
/// </summary>
    
/// <returns>数据源</returns>
    
/// <author>天志</author>
    
/// <log date="2007-11-13">创建</log>
    protected virtual DataView GetDataView()
    {
        
throw new Exception("没有重写基类中的“GetData()”函数,所以无法设置DataGrid的数据源。");
    }

      
/// <summary>
    
/// 添加DataGrid的数据源。
    
/// </summary>
    
/// <param name="dgdList">DataGrid控件</param>
    
/// <param name="refresh">是否重新读取数据源</param>
    
/// <param name="sortExpression">排序字段</param>
    
/// <author>天志</author>
    
/// <log date="2007-11-13">创建</log>
    private void BindDataGrid(DataGrid dgdList, bool refresh, string sortExpression)
    {
         
    }
}


基类里,有几个函数是允许被覆盖的。
GetDataView():取得DataGrid的数据源。
InitialDataGridControl属性:当前页面中的DataGrid。
ItemDataBoundSet(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e, DataRowView drv):根据不同的情景,设置DataGrid的行显示格式。  
内容概要:本文档详细介绍了一个基于MATLAB实现的电力负荷预测项目,该项目运用遗传算法(GA)优化支持向量回归(SVR)和支持向量机(SVM)模型的超参数及特征选择。项目旨在解决电力系统调度、发电计划、需求侧响应等多个应用场景中的关键问题,特别是在应对高比例可再生能源接入带来的非线性、非平稳负荷预测挑战。文中涵盖了从数据接入、特征工程、模型训练到部署上线的全流程,包括详细的代码示例和GUI设计,确保方案的可复现性和实用性。 适用人群:具备一定编程基础,尤其是熟悉MATLAB语言和机器学习算法的研发人员;从事电力系统调度、电力市场交易、新能源消纳等相关领域的工程师和技术专家。 使用场景及目标:①通过构建面向小时级别的滚动预测,输出高分辨率负荷轨迹,为日内与日前滚动调度提供边际成本最小化的依据;②在负荷高峰和供给紧张时,通过价格信号或直接负荷控制实施需求侧响应,提升削峰效率并抑制反弹;③为灵活性资源(调峰机组、储能、可中断负荷)提供更清晰的出清路径,降低弃风弃光率,提升系统整体清洁度;④帮助市场主体更准确地评估边际出清价格变化,提高报价成功率与收益稳定性,同时降低由预测偏差带来的风险敞口;⑤在运维与审计场景中,对预测产生的原因进行说明,保障业务侧与监管侧的可追溯性。 阅读建议:此资源不仅提供了完整的代码实现和GUI设计,更注重于理解GA优化过程中涉及到的数据处理、特征构造、模型选择及评估等核心步骤。因此,在学习过程中,建议结合实际案例进行实践,并深入研究每个阶段的具体实现细节,特别是适应度函数的设计、超参数空间的定义以及多样性维护机制的应用。此外,关注项目中关于数据对齐、缺失值处理、特征标准化等方面的最佳实践,有助于提高模型的鲁棒性和泛化能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值