当前位置:  编程技术>.net/c#/asp.net

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

    来源: 互联网  发布时间:2014-08-30

    本文导语:      在网上看到的一个不错的asp.net MVC学习系列,希望可以帮助那些正在研究MVC的朋友们。     本部分内容:asp.net MVC进阶学习---HtmlHelper之GridView控件拓展(三) 。 1.扩展核心代码    代码如下: using System;    using System.Collect...

    在网上看到的一个不错的asp.net MVC学习系列,希望可以帮助那些正在研究MVC的朋友们。
    本部分内容:asp.net MVC进阶学习---HtmlHelper之GridView控件拓展(三) 。

1.扩展核心代码
  

代码如下:

using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Web;
   using System.Web.Mvc.Html;
   using System.Web.Mvc;
   using MvcTest.Code;
   using System.Web.UI;
   using System.IO;
  using System.Data;
 
  namespace MvcTest.Code
  {
      public static class GridViewHelper
      {
          public static string GridView(this HtmlHelper helper, PageList items, string[] columns, GridViewOption option)
          {
  if (columns == null)
  {
      columns = typeof(T).GetProperties().Select(p => p.Name).ToArray();
  }
 
  if (option.Headers == null)
  {
      option.Headers = columns;
  }
  else
  {
      if (option.Headers.Length != columns.Length)
      {
          option.Headers = columns;
      }
  }
 
  HtmlTextWriter writer = new HtmlTextWriter(new StringWriter());
  writer.RenderBeginTag(HtmlTextWriterTag.Table);
 
  //标题
  RenderHeander(helper, writer, columns, option);
 
  //添加数据行
  RenderRow(helper, writer, items, columns, option);
 
  //添加分页
  RenderPageList(helper, writer, items, columns, option);
 
  return writer.InnerWriter.ToString(); ;
          }

          ///
          /// 添加表头行
          ///
          ///
          ///
          ///
          ///
          ///
          ///
          public static string RenderHeander(this HtmlHelper helper, HtmlTextWriter writer, string[] columns, GridViewOption option)
          {
  writer.RenderBeginTag(HtmlTextWriterTag.Tr);
  for (int i = 0; i < option.Headers.Length;i++ )
  {
      writer.AddAttribute("id",columns[i]);
      writer.AddAttribute("name", columns[i]);
      writer.RenderBeginTag(HtmlTextWriterTag.Th);
      writer.Write(option.Headers[i]);
      writer.RenderEndTag();
  }
 
  //如果有编辑或删除列,则要在原有列的基础上加一列
  if (option.IsEidt || option.IsDelete)
  {
      writer.RenderBeginTag(HtmlTextWriterTag.Th);
      writer.RenderEndTag();
  }
  writer.RenderEndTag();
  return writer.InnerWriter.ToString();
          }
 
          ///
          /// 添加数据行
          ///
          ///
          ///
          ///
          ///
          ///
          ///
          public static string RenderRow(this HtmlHelper helper, HtmlTextWriter writer, PageList items, string[] columns, GridViewOption option)
          {
  string value = null;
  foreach (var item in items)
  {
      writer.RenderBeginTag(HtmlTextWriterTag.Tr);
      for (int i = 0; i < columns.Length; i++)
      {
          writer.RenderBeginTag(HtmlTextWriterTag.Td);
         value = typeof(T).GetProperty(columns[i]).GetValue(item, null).ToString();
         if (i == 0)
         {
 writer.AddAttribute("type", "hidden");
 writer.AddAttribute("id",items.IdentityName);
 writer.AddAttribute("name", items.IdentityName);
 writer.AddAttribute("value", typeof(T).GetProperty(items.IdentityName).GetValue(item, null).ToString());
 writer.RenderBeginTag(HtmlTextWriterTag.Input);
 writer.RenderEndTag();
 writer.Write(value.Length > 20 ? value.Substring(0, 20) : value);
         }
         else
         {
 writer.Write(value.Length > 20 ? value.Substring(0, 20) : value);
         }
         //writer.Write(value);
         writer.RenderEndTag();
     }
     if (option.IsEidt || option.IsDelete)
     {
         writer.RenderBeginTag(HtmlTextWriterTag.Td);
         if (option.IsEidt)
         {
 //writer.Write(helper.ActionLink(option.EditButton, null, null, new { @class = "Edit_Link" }) + "   ");
 writer.Write("编辑   ");
         }
         if (option.IsDelete)
         {
 writer.Write(helper.ActionLink(option.DeleteButton, option.DeleteAction, new { controller = option.DeleteController, id = typeof(T).GetProperty(items.IdentityName).GetValue(item, null).ToString() }));
         }
 
         writer.RenderEndTag();
     }
     writer.RenderEndTag();
 }
 return writer.InnerWriter.ToString();
         }
 
 
         ///
         /// 添加分页
         ///
         ///
         ///
         ///
         ///
         public static string RenderPageList(this HtmlHelper helper, HtmlTextWriter writer, PageList items, string[] columns, GridViewOption option)
         {
 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
 if (option.IsEidt || option.IsDelete)
 {
     writer.AddAttribute("colspan", (option.Headers.Length + 1).ToString());
 }
 else
 {
     writer.AddAttribute("colspan", (option.Headers.Length).ToString());
 }
 writer.AddAttribute("align", "center");
 writer.RenderBeginTag(HtmlTextWriterTag.Td);
 writer.Write(helper.ActionLink("首页", items.Action, new { controller = items.Controller, pageIndex = 1 }) + "    ");
 writer.Write(helper.ActionLink("上一页", items.Action, new { controller = items.Controller, pageIndex = items.Page.PageIndex - 1 }) + "    ");
 writer.Write(items.Page.PageIndex + "/" + items.Page.PageCount + "页    ");
 writer.Write(helper.ActionLink("下一页", items.Action, new { controller = items.Controller, pageIndex = items.Page.PageIndex + 1 }) + "    ");
 writer.Write(helper.ActionLink("尾页", items.Action, new { controller = items.Controller, pageIndex = items.Page.PageCount }) + "    ");
 writer.RenderEndTag();
 writer.RenderEndTag();
 writer.RenderEndTag();
 
 //构建隐藏表单
 writer.AddStyleAttribute("display","none");
 writer.RenderBeginTag(HtmlTextWriterTag.Div);
 writer.AddAttribute("id","form0");
 writer.AddAttribute("action","/Home/Update");
 writer.AddAttribute("method","post");
 writer.RenderBeginTag(HtmlTextWriterTag.Form);
 foreach (string column in columns)
 {
     writer.AddAttribute("type","hidden");
     writer.AddAttribute("id", column);
     writer.AddAttribute("name", column);
     writer.AddAttribute("value", "");
     writer.RenderBeginTag(HtmlTextWriterTag.Input);
     writer.RenderEndTag();
 }
 writer.RenderEndTag();
 writer.RenderEndTag();
 
 return writer.InnerWriter.ToString();
         }
     }
 }

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

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

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(helper, writer, columns, option);

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

//添加分页
RenderPageList(helper, writer, items, columns, option);
return writer.InnerWriter.ToString(); ;

这段就是调用下面的方法,设置数据。更多方法介绍看下篇。

原文作者:情缘 http://www.cnblogs.com/qingyuan


    
 
 

您可能感兴趣的文章:

  • asp.net MVC进阶学习---HtmlHelper之GridView控件拓展(一)
  • asp.net MVC进阶学习---个性化目录结构(二)
  • asp.net MVC进阶学习---HtmlHelper控件解析(五)
  • asp.net MVC进阶学习---HtmlHelper控件解析(四)
  • asp.net MVC进阶学习---个性化目录结构(一)
  • asp.net MVC进阶学习---HtmlHelper控件解析(三)
  • asp.net MVC进阶学习---HtmlHelper控件解析(一)
  • asp.net MVC进阶学习---HtmlHelper控件解析(二)
  • asp.net MVC进阶学习---HtmlHelper之GridView控件拓展(二)
  • asp.net MVC进阶学习---HtmlHelper之GridView控件拓展(五)
  • asp.net MVC进阶学习---个性化目录结构(三)
  • asp.net MVC进阶学习---HtmlHelper之GridView控件拓展(四)
  • asp.net MVC进阶学习---View和Controller之间的数据传递(一)
  • asp.net Control控件常用的属性与方法
  • ASP.NET 页面中加添加用户控件的写法
  • asp.net判断数据库表是否存在 asp.net修改表名的方法 iis7站长之家
  • Asp.net日历控件显示年和月
  • asp控件和html控件的概念区别
  • Asp.Net其他页面如何调用Web用户控件写的分页
  • asp.net动态添加非标准html控件的方法
  • asp.net 用户控件中图片与样式引用的问题
  • asp.net ajax时用alert弹出对话框与验证控件冲突的解决方法
  • 把某个asp.net 控件替换成自定义控件的方法
  • asp.net Textbox服务器控件的技巧分享(图文)
  • asp.net(c#版)添加DataRow数据列到DataTable控件
  • asp.net 动态创建控件的演示实例
  • asp.net服务器控件调整技巧
  • asp.net实例代码 在DataGrid控件中显示数据
  • asp.net Textbox服务器控件的例子
  • 学习asp.net动态添加控件的方法
  • asp.net 动态添加多个用户控件(实例代码)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ASP.NET之 Ajax相关知识介绍及组件图
  • 我想了解一些关于Java怎样与Asp或Asp.net结合方面在未来发展方向的问题?
  • c#/ASP.NET操作cookie(读写)代码示例
  • asp.net UrlEncode对应asp urlencode的处理方法
  • asp.net实例 定义和使用asp:AccessDataSource
  • win2008 r2 服务器环境配置(FTP/ASP/ASP.Net/PHP)
  • asp与asp.net的session共享
  • 如何在unix下发布asp?
  • 怎么让Apache支持Asp?
  • ??谁能把ASP代码改为JSP的
  • Linux平台下哪种方法实现ASP好?
  • ASP和ASP.Net共享Session解决办法
  • 通过socket和asp打交道
  • 犹豫中……,到底是选择ASP,还是JSP?
  • asp 是否 可用applet标签?帮忙!!
  • asp.net判断数据库表是否存在 asp.net修改表名的方法
  • 新人提问:asp+access的程序在linux下怎么改?
  • 用JAVA APPLET做的交互式网页和ASP、PHP做的相比有什么优势呢?
  • asp.net文字水印功能简单代码
  • asp里面可否使用java写的邮件,给30分.
  • asp与Jsp可否在iis中共存的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3