MVC进阶学习--HtmlHelper之GridView控件拓展(三)

1.扩展核心代码

Code
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Web;
  5 using System.Web.Mvc.Html;
  6 using System.Web.Mvc;
  7 using MvcTest.Code;
  8 using System.Web.UI;
  9 using System.IO;
 10 using System.Data;
 11 
 12 namespace MvcTest.Code
 13 {
 14     public static class GridViewHelper
 15     {
 16         public static string GridView<T>(this HtmlHelper helper, PageList<T> items, string[] columns, GridViewOption option)
 17         {
 18             if (columns == null)
 19             {
 20                 columns = typeof(T).GetProperties().Select(p => p.Name).ToArray<string>();
 21             }
 22 
 23             if (option.Headers == null)
 24             {
 25                 option.Headers = columns;
 26             }
 27             else
 28             {
 29                 if (option.Headers.Length != columns.Length)
 30                 {
 31                     option.Headers = columns;
 32                 }
 33             }
 34 
 35             HtmlTextWriter writer = new HtmlTextWriter(new StringWriter());
 36             writer.RenderBeginTag(HtmlTextWriterTag.Table);
 37 
 38             //标题
 39             RenderHeander<T>(helper, writer, columns, option);
 40 
 41             //添加数据行
 42             RenderRow<T>(helper, writer, items, columns, option);
 43 
 44             //添加分页
 45             RenderPageList<T>(helper, writer, items, columns, option);
 46 
 47             return writer.InnerWriter.ToString(); ;
 48         }
 49 
 50 
 51         /// <summary>
 52         /// 添加表头行
 53         /// </summary>
 54         /// <typeparam name="T"></typeparam>
 55         /// <param name="helper"></param>
 56         /// <param name="writer"></param>
 57         /// <param name="columns"></param>
 58         /// <param name="option"></param>
 59         /// <returns></returns>
 60         public static string RenderHeander<T>(this HtmlHelper helper, HtmlTextWriter writer, string[] columns, GridViewOption option)
 61         {
 62             writer.RenderBeginTag(HtmlTextWriterTag.Tr);
 63             for (int i = 0; i < option.Headers.Length;i++ )
 64             {
 65                 writer.AddAttribute("id",columns[i]);
 66                 writer.AddAttribute("name", columns[i]);
 67                 writer.RenderBeginTag(HtmlTextWriterTag.Th);
 68                 writer.Write(option.Headers[i]);
 69                 writer.RenderEndTag();
 70             }
 71 
 72             //如果有编辑或删除列,则要在原有列的基础上加一列
 73             if (option.IsEidt || option.IsDelete)
 74             {
 75                 writer.RenderBeginTag(HtmlTextWriterTag.Th);
 76                 writer.RenderEndTag();
 77             }
 78             writer.RenderEndTag();
 79             return writer.InnerWriter.ToString();
 80         }
 81 
 82         /// <summary>
 83         /// 添加数据行
 84         /// </summary>
 85         /// <param name="helper"></param>
 86         /// <param name="writer"></param>
 87         /// <param name="item"></param>
 88         /// <param name="columns"></param>
 89         /// <param name="option"></param>
 90         /// <returns></returns>
 91         public static string RenderRow<T>(this HtmlHelper helper, HtmlTextWriter writer, PageList<T> items, string[] columns, GridViewOption option)
 92         {
 93             string value = null;
 94             foreach (var item in items)
 95             {
 96                 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
 97                 for (int i = 0; i < columns.Length; i++)
 98                 {
 99                     writer.RenderBeginTag(HtmlTextWriterTag.Td);
100                     value = typeof(T).GetProperty(columns[i]).GetValue(item, null).ToString();
101                     if (i == 0)
102                     {
103                         writer.AddAttribute("type", "hidden");
104                         writer.AddAttribute("id",items.IdentityName);
105                         writer.AddAttribute("name", items.IdentityName);
106                         writer.AddAttribute("value", typeof(T).GetProperty(items.IdentityName).GetValue(item, null).ToString());
107                         writer.RenderBeginTag(HtmlTextWriterTag.Input);
108                         writer.RenderEndTag();
109                         writer.Write(value.Length > 20 ? value.Substring(0, 20) : value);
110                     }
111                     else
112                     {
113                         writer.Write(value.Length > 20 ? value.Substring(0, 20) : value);
114                     }
115                     //writer.Write(value);
116                     writer.RenderEndTag();
117                 }
118                 if (option.IsEidt || option.IsDelete)
119                 {
120                     writer.RenderBeginTag(HtmlTextWriterTag.Td);
121                     if (option.IsEidt)
122                     {
123                         //writer.Write(helper.ActionLink(option.EditButton, null, null, new { @class = "Edit_Link" }) + "   ");
124                         writer.Write("<a href='#' class='Edit_Link'>编辑</a>&nbsp;&nbsp;&nbsp;");
125                     }
126                     if (option.IsDelete)
127                     {
128                         writer.Write(helper.ActionLink(option.DeleteButton, option.DeleteAction, new { controller = option.DeleteController, id = typeof(T).GetProperty(items.IdentityName).GetValue(item, null).ToString() }));
129                     }
130 
131                     writer.RenderEndTag();
132                 }
133                 writer.RenderEndTag();
134             }
135             return writer.InnerWriter.ToString();
136         }
137 
138 
139         /// <summary>
140         /// 添加分页
141         /// </summary>
142         /// <param name="helper"></param>
143         /// <param name="writer"></param>
144         /// <param name="option"></param>
145         /// <returns></returns>
146         public static string RenderPageList<T>(this HtmlHelper helper, HtmlTextWriter writer, PageList<T> items, string[] columns, GridViewOption option)
147         {
148             writer.RenderBeginTag(HtmlTextWriterTag.Tr);
149             if (option.IsEidt || option.IsDelete)
150             {
151                 writer.AddAttribute("colspan", (option.Headers.Length + 1).ToString());
152             }
153             else
154             {
155                 writer.AddAttribute("colspan", (option.Headers.Length).ToString());
156             }
157             writer.AddAttribute("align", "center");
158             writer.RenderBeginTag(HtmlTextWriterTag.Td);
159             writer.Write(helper.ActionLink("首页", items.Action, new { controller = items.Controller, pageIndex = 1 }) + "&nbsp;&nbsp;&nbsp;&nbsp;");
160             writer.Write(helper.ActionLink("上一页", items.Action, new { controller = items.Controller, pageIndex = items.Page.PageIndex - 1 }) + "&nbsp;&nbsp;&nbsp;&nbsp;");
161             writer.Write(items.Page.PageIndex + "/" + items.Page.PageCount + "页&nbsp;&nbsp;&nbsp;&nbsp;");
162             writer.Write(helper.ActionLink("下一页", items.Action, new { controller = items.Controller, pageIndex = items.Page.PageIndex + 1 }) + "&nbsp;&nbsp;&nbsp;&nbsp;");
163             writer.Write(helper.ActionLink("尾页", items.Action, new { controller = items.Controller, pageIndex = items.Page.PageCount }) + "&nbsp;&nbsp;&nbsp;&nbsp;");
164             writer.RenderEndTag();
165             writer.RenderEndTag();
166             writer.RenderEndTag();
167 
168             //构建隐藏表单
169             writer.AddStyleAttribute("display","none");
170             writer.RenderBeginTag(HtmlTextWriterTag.Div);
171             writer.AddAttribute("id","form0");
172             writer.AddAttribute("action","/Home/Update");
173             writer.AddAttribute("method","post");
174             writer.RenderBeginTag(HtmlTextWriterTag.Form);
175             foreach (string column in columns)
176             {
177                 writer.AddAttribute("type","hidden");
178                 writer.AddAttribute("id", column);
179                 writer.AddAttribute("name", column);
180                 writer.AddAttribute("value", "");
181                 writer.RenderBeginTag(HtmlTextWriterTag.Input);
182                 writer.RenderEndTag();
183             }
184             writer.RenderEndTag();
185             writer.RenderEndTag();
186 
187             return writer.InnerWriter.ToString();
188         }
189     }
190 }
191 

(1)
public static string GridView<T>(this HtmlHelper helper, PageList<T> items, string[] columns, GridViewOption option)
this HtmlHelper helper  这个是.net3.0 中的新特性,我们扩展HtmlHelper这个类,使之具有GridView<T>()这个泛型方法
PageList<T> items   则是指定的数据源(上篇提到过的自定义的数据集合),
string[] columns      这个是指定GridView 显示哪几列,和GridViewOption中的header数组有区别,这个是针对数据库字段或者某个实体的属性,而GridViewOption中的是表格的头部不封显示的字样
(2)

if (columns == null)
            {
                columns = typeof(T).GetProperties().Select(p => p.Name).ToArray<string>();
            }

            if (option.Headers == null)
            {
                option.Headers = columns;
            }
            else
            {
                if (option.Headers.Length != columns.Length)
                {
                    option.Headers = columns;
                }
            }

这个定义了表格标题的匹配规则,如果columns 的值为null,则默认显示该对象的所有属性,这里区分columns和heander数组,同时也匹配了二者之间的关系。如果这两个数组的长度相等,则表头显示自定义的字样,否则都以columns中的字样为主
(3)

             HtmlTextWriter writer = new HtmlTextWriter(new StringWriter());
            writer.RenderBeginTag(HtmlTextWriterTag.Table);

            //标题
            RenderHeander<T>(helper, writer, columns, option);

            //添加数据行
            RenderRow<T>(helper, writer, items, columns, option);

            //添加分页
            RenderPageList<T>(helper, writer, items, columns, option);

            return writer.InnerWriter.ToString(); ;

           这段就是调用下面的方法,设置数据

更多方法介绍看下篇

时间: 2024-09-20 08:59:53

MVC进阶学习--HtmlHelper之GridView控件拓展(三)的相关文章

MVC进阶学习--HtmlHelper之GridView控件拓展(五)

1.GridView使用Action代码   Code 1 public ActionResult Index() 2         { 3             CommonPage page = TempData["page"] as CommonPage; 4             if (page == null) 5             { 6                 page = new CommonPage(); 7             } 8   

MVC进阶学习--HtmlHelper之GridView控件拓展(一)

      最近用MVC做项目的时候,感觉脱离了原有WebForm的那种编程方式,心中略有想法.在WebForm中由一个很常用的数据绑定控件GridView,我相信用过.net的同仁都会使用这个控件,在开发中的确给我们带来了不少的方便.而现在的MVC改变了原有的那种模式,没有了控件编程,输出表格都用foreach,for 循环之类的,似乎有些麻烦了.于是自己写了一个扩展标签GridView.写完之后感觉还可以,给各位分享一下.       1.功能介绍             (1).该扩展标签

MVC进阶学习--HtmlHelper之GridView控件拓展(二)

1.目录结构图       2.自定义集合类 Codeusing System;using System.Collections.Generic;using System.Linq;using System.Web; namespace MvcTest.Code{    public class PageList<T> : List<T>    {        private CommonPage _page;         public CommonPage Page    

MVC进阶学习--HtmlHelper控件解析(四)

1.RenderPartialExtensions类      RenderPartialExtensions类主要扩展了一个方法 RenderPartial()      RenderPartial(string partialViewName);      RenderPartial(string partialViewName,ViewDataDictionary viewData);      RenderPartial(string partialViewName,object mod

MVC进阶学习--HtmlHelper控件解析(二)

1.InputExtensions类      InputExtensions类主要有5种类型的扩展方法,分别用于CheckBox控件,Hidden控件,Pass控件,RadionButton控件,TextBox控件 2.CheckBox控件      有如下重载方法:      CheckBox(string name);      CheckBox(string name,bool isChecked);      CheckBox(string name,book isChecked,ob

MVC进阶学习--HtmlHelper控件解析(五)

1.SelectExtensions 类      SelectExtensions 主要扩展了两种类型的方法 DropDowList和ListBox,这两个方法主要区别是后者添加了一个属性multiple="multiple",设置这个属性主要是为了能够多选 2.DropDowList使用例子代码       Code<tr>            <td width="100" align="right">      

学习使用Material Design控件(三)使用CardView实现卡片效果

本文主要介绍CardView的使用,CardView是继承自FrameLayout,使用比较简单,只需要用CardView包含其他View就可以实现卡片效果了. 实现效果如下: 加入依赖库 dependencies { -. compile 'com.android.support:cardview-v7:22.2.0' } Layout布局 <android.support.v7.widget.CardView android:layout_width="match_parent&quo

MVC进阶学习--HtmlHelper控件解析(一)

1.HtmlHelper类      HtmlHelper类位于System.Web.MVC.Html命名空间下.主要包括FormExtensions,InputExtensions,LinkExtensions,SelectExtensions,TextAreaExtensions,ValidationExtensions,RenderPartialExtensions等7个静态内,他们全部是是采用拓展方法来实现的      在asp.net MVC中ViewPage中使用的属性如下:    

MVC进阶学习--HtmlHelper控件解析(三)

1.LinkExtensions类      该类主要用于生成相关链接,主要扩展了ActionLink和RouteLink方法 2.ActionLink       ActionLink扩展方法主要实现一个连接,共有十个重载方法      ActionLink(string linkText,string actionName);      ActionLink(string linkText,string actionName,object routeValues);      ActionL