posted by 동자~ 2011.09.25 04:08

드디어 캐리어가 왔음~(보물상자 같은.. ㅋㅋ)
아.. 내가 혼자 여행을 잘할 수 있을까!!??? ㅎㅎㅎ !!

D - 3 !!!!!!!!!!!!!
신고
posted by 동자~ 2011.08.17 00:57
- 소스코드

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using System.Text;

using System.Data.Linq;


namespace CustomNamespace

{

    public static class PageHelpers

    {

        public class PageObject<R>

        {

            public List<R> List { get; set; }

            public int TotalCount { get; set; }

            public string LinkTags { get; set; }

        }

        public static PageObject<R> GetPageObject<T, R>(this HtmlHelper html, int currentPage, int pageRange, Func<int, string> pageUrl, IQueryable<T> table, Func<T, bool> where, Func<T, R> select) where T : class

        {

            PageObject<R> pageObject = new PageObject<R>();

            pageObject.List =

                table

                    .Where(where)

                    .Select(select)

                    .Skip(currentPage * pageRange)

                    .Take(pageRange)

                    .ToList();

            pageObject.TotalCount =

                table

                    .Where(where)

                    .Select(select)

                    .Count();

            pageObject.LinkTags = PageLinkTag(null, currentPage, pageObject.TotalCount, pageRange, pageUrl);

            return pageObject;

        }


        public static string PageLinkTag(this HtmlHelper html, int currentPage, int totalCount, int pageRange, Func<int, string> pageUrl)

        {

            StringBuilder result = new StringBuilder();

            int totalPages = (int)(totalCount / pageRange);

            if (totalCount % pageRange != 0)

            {

                totalPages++;

            }

            for (int i = 1; i <= totalPages; ++i)

            {

                TagBuilder tag = new TagBuilder("a");

                tag.MergeAttribute("href", pageUrl(i));

                tag.InnerHtml = i.ToString();

                if (i == currentPage)

                    tag.AddCssClass("selected");

                result.AppendLine(tag.ToString());

            }

            return result.ToString();

        }

    }

}


- 사용법

ViewBag.PageObject =

                ((HtmlHelper)null)

                    .GetPageObject</*원천 데이터형*/, /*변환 데이터형*/>(

                       /* page 넘버 */,

                        /* 한page당 보여지는 갯수 */,

                        (i =>/* 링크 스트링 */)),

                        /*IQueryable<원천 데이터형> Object*/,

                        (x =>

                            /* where 조건들. */

                        ),

                        (_x => /* select 변환 */)

                    );


- 예제

public class NameBook
{

public string FirstName{get;set;}
public string LastName{get;set;}

}

.......


List<string> fullNames = new List<string>(){"dk.hyun","zerry.hyun","ck.lim","jw.park"};

ViewBag.PageObject =

                ((HtmlHelper)null)

                    .GetPageObject<String,NameBook>(

                       0,

                        2,

                        (i => Url.Action("NameBookList", new { pageNo = i-1 })),

                        fullNames,

                        (x => true),

                        (_x => new NameBook(){

FirstName = _x.split('.')[0],
LastName = _x.split(',')[1]

})

                    );

.....
<Output>
PageObject.List =>[{FirstName = "dk", LastName = "hyun"},{FirstName = "zerry", LastName = "hyun"}]
PageObject.TotalCount=>2
PageObject.LinkTags =>
      <a href="/NameBookList?pageNo=0" class="selected">1</a> 
      <a href="/NameBookList?pageNo=0" class="selected">2</a> 

 
신고
posted by 동자~ 2011.06.15 01:59

http://ufx.kr/blog/393
신고

티스토리 툴바