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
- C#利用委托处理数据源
- C#委托处理方法
- c#利用委托窗体间传值
- 在C#中处理委托
- C#通过委托处理 控件
- c#委托与java处理
- C# 委托delege的处理
- 利用委托和对象处理窗体间传值
- 利用委托机制处理.NET中的异常
- C#中利用委托传递事件
- c# 利用委托返回控件的值
- C#利用委托进行多线程访问控件
- Java 利用反射实现C#的委托
- C# 利用委托实现窗体间传值
- C# 利用委托实现窗体间传值
- C#中委托和事件处理
- C# FileStream异常处理以及委托
- C#委托及事件处理机制浅析
- linux下的模块加载
- C++中的try{} catch(…)
- Asp.Net处理Session失效解决方案
- Extjs combo数据绑定与获取
- javascript 获取页面高度(多种浏览器)
- C#利用委托处理数据源
- Extjs 常用3种proxy详解
- play framework2-java配置多个数据源/多个数据库/play2/play2-java
- rt.jar,dt.jar,tool.jar的作用
- 利用 virtualbox + ubuntu 打造hadoop集群
- ubuntu下更改eclipse提示框的背景颜色(原来为黑色)
- android Listview下拉刷新
- UVa539
- define中#与##区别