C#利用委托处理数据源

来源:互联网 发布:淘宝兼职是真的吗 编辑:程序博客网 时间:2024/05/18 03:04

委托在.Net Framework中的应用非常广泛,最近一个项目用到了委托来处理GridView数据源,在这里做了一个简单的Demo来分享一下它的应用场景,相信对委托不是很熟悉的朋友,看后应该会有所了解。

说明:Demo使用了自定义控件(LinqGridView)。

一、自定义LinqGridView 类源码

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI.WebControls;namespace DelegateWeb.UserControl{    /// <summary>    /// 描述:自定义Linq数据表格    /// 作者:Eric He    /// 日期:2012-08-09    /// </summary>    public class LinqGridView : GridView    {        /// <summary>        /// 定义一个返回IQueryable类型的委托        /// </summary>        /// <returns></returns>        public delegate IQueryable GetCurrentQuery();        /// <summary>        /// 定义一个返回Object类型的委托        /// </summary>        /// <returns></returns>        public delegate object GetQueryList();        /// <summary>        /// 数据查询器(IQueryable类型的委托)        /// </summary>        public GetCurrentQuery QueryGetter;        /// <summary>        /// 数据查询器(Object类型的委托)        /// </summary>        public GetQueryList ListGetter;        /// <summary>        /// 加载数据        /// </summary>        /// <returns></returns>        public void LoadData()        {            //如果有方法注册委托变量            if (QueryGetter != null)                //通过委托调用方法                base.DataSource = QueryGetter.Invoke();            else if (ListGetter != null)                base.DataSource = ListGetter.Invoke();            else                base.DataSource = LinqQuery;            this.DataBind();        }        /// <summary>        /// 数据查询接口        /// </summary>        public IQueryable LinqQuery        {            get;            set;        }    }}


二、页面html代码

            1. 注册自定义控件:<%@ Register Assembly="DelegateWeb" Namespace="DelegateWeb.UserControl" TagPrefix="UC"%>
            2. 使用自定义控件:<UC:LinqGridView ID="gvTest" runat="server"></UC:LinqGridView>

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LoadData.aspx.cs" Inherits="DelegateWeb.LoadData" %><%@ Register Assembly="DelegateWeb" Namespace="DelegateWeb.UserControl" TagPrefix="UC"%><!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></head><body>    <form id="form1" runat="server">    <div>    <UC:LinqGridView ID="gvTest" runat="server"></UC:LinqGridView>    </div>    </form></body></html>


三、页面.cs代码

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using DelegateStudy.Entity;using DelegateStudy;using DelegateWeb.UserControl;namespace DelegateWeb{    public partial class LoadData : BasePage    {        protected override void OnLoad(EventArgs e)        {            //指定数据源              gvTest.QueryGetter = QueryEmployee;            base.OnLoad(e);        }        protected void Page_Load(object sender, EventArgs e)        {            if (!IsPostBack)            {                gvTest.LoadData();            }        }        /// <summary>        /// 查询员工数据        /// </summary>        /// <returns></returns>        private IQueryable QueryEmployee()        {            List<Employee> lstEmployee = new List<Employee>();            lstEmployee.Add(new Employee { Id = 1, FirstName = "Eric", LastName = "He", Age = 24 });            lstEmployee.Add(new Employee { Id = 2, FirstName = "Issac", LastName = "Chen", Age = 26 });            lstEmployee.Add(new Employee { Id = 3, FirstName = "Jim", LastName = "Zhang", Age = 25 });            lstEmployee.Add(new Employee { Id = 4, FirstName = "Warren", LastName = "Yang", Age = 25 });            lstEmployee.Add(new Employee { Id = 5, FirstName = "Yafyr", LastName = "Qiu", Age = 26 });            lstEmployee.Add(new Employee { Id = 6, FirstName = "Cheney", LastName = "Zhang", Age = 30 });            return (from a in lstEmployee select a).AsQueryable();        }        struct Employee        {            private int id;            private string firstname;            private string lastname;            private int age;            public int Id            {                get { return id; }                set { id = value; }            }            public string FirstName            {                get { return firstname; }                set { firstname = value; }            }            public string LastName            {                get { return lastname; }                set { lastname = value; }            }            public int Age            {                get { return age; }                set { age = value; }            }            public Employee(int iId, string strFirstNamem, string strLastName, int iAge)            {                id = iId;                firstname = strFirstNamem;                lastname = strLastName;                age = iAge;            }        }    }}

 

四、效果图


 

作者:Eric He
http://my.csdn.net/eriche_yong

原创粉丝点击