玄铁剑

成功的途径:抄,创造,研究,发明...
posts - 128, comments - 42, trackbacks - 0, articles - 174

<%@ CodeTemplate Language="C#" TargetLanguage="C#" Description="Generates a very simple business object." %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.Data" %>
using System;
using System.Data;
using System.Collections;

namespace DemoDataTable
{
 #region <%= GetClassName(SourceTable) %>
 /// <summary>
 /// This object represents the properties and methods of a <%= GetClassName(SourceTable) %>.
 /// </summary>
 public class <%= GetClassName(SourceTable) %>
 {
  <% foreach (ColumnSchema column in SourceTable.Columns) { %>
  <%= GetMemberVariableDeclarationStatement(column) %>
  <% } %>
  
  public <%= GetClassName(SourceTable) %>()
  {
  <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %> 
  <%="    "+SourceTable.Columns[i].Name.ToString()+" = "+ GetDefaultValue(SourceTable.Columns[i])+";" %>
  <% } %>  
  } 
  
 
  #region Public Properties
  
  <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>
  public <%= GetCSharpVariableType(SourceTable.Columns[i]) %> <%= GetPropertyName(SourceTable.Columns[i]) %>
  {
   get {return <%= GetMemberVariableName(SourceTable.Columns[i]) %>;}
   set {<%= GetMemberVariableName(SourceTable.Columns[i]) %> = value;}
  }
  <% if (i < SourceTable.Columns.Count - 1) Response.Write("\r\n"); %>  
  <% } %>
  #endregion  
 }
 #endregion
<script runat="template">
public string GetMemberVariableDeclarationStatement(ColumnSchema column)
{
 return GetMemberVariableDeclarationStatement("protected", column);
}

public string GetMemberVariableDeclarationStatement(string protectionLevel, ColumnSchema column)
{
 string statement = protectionLevel + " ";
 statement += GetCSharpVariableType(column) + " " + GetMemberVariableName(column);
 
 string defaultValue = GetMemberVariableDefaultValue(column);
 if (defaultValue != "")
 {
  statement += " = " + defaultValue;
 }
 
 statement += ";";
 
 return statement;
}

public string GetReaderAssignmentStatement(ColumnSchema column, int index)
{
 string statement = "if (!reader.IsDBNull(" + index.ToString() + ")) ";
 statement += GetMemberVariableName(column) + " = ";
 
 if (column.Name.EndsWith("TypeCode")) statement += "(" + column.Name + ")";
 
 statement += "reader." + GetReaderMethod(column) + "(" + index.ToString() + ");";
 
 return statement;
}

public string GetCamelCaseName(string value)
{
 return value.Substring(0, 1).ToLower() + value.Substring(1);
}

public string GetMemberVariableName(ColumnSchema column)
{
 string propertyName = GetPropertyName(column);
 string memberVariableName = "_" + GetCamelCaseName(propertyName);
 
 return memberVariableName;
}

public string GetPropertyName(ColumnSchema column)
{
 string propertyName = column.Name;
 
 if (propertyName == column.Table.Name + "Name") return "Name";
 if (propertyName == column.Table.Name + "Description") return "Description";
 
 if (propertyName.EndsWith("TypeCode")) propertyName = propertyName.Substring(0, propertyName.Length - 4);
 
 return propertyName;
}
  
public string GetMemberVariableDefaultValue(ColumnSchema column)
{
 switch (column.DataType)
 {
  case DbType.Guid:
  {
   return "Guid.Empty";
  }
  case DbType.AnsiString:
  case DbType.AnsiStringFixedLength:
  case DbType.String:
  {
   return "";
  }
  case DbType.StringFixedLength:
  {
   return "String.Empty";
  }
  default:
  {
   return "";
  }
 }
}

public string GetCSharpVariableType(ColumnSchema column)
{
 if (column.Name.EndsWith("TypeCode")) return column.Name;
 
 switch (column.DataType)
 {
  case DbType.AnsiString: return "string";
  case DbType.AnsiStringFixedLength: return "string";
  case DbType.Binary: return "byte[]";
  case DbType.Boolean: return "bool";
  case DbType.Byte: return "byte";
  case DbType.Currency: return "decimal";
  case DbType.Date: return "DateTime";
  case DbType.DateTime: return "DateTime";
  case DbType.Decimal: return "decimal";
  case DbType.Double: return "double";
  case DbType.Guid: return "Guid";
  case DbType.Int16: return "short";
  case DbType.Int32: return "int";
  case DbType.Int64: return "long";
  case DbType.Object: return "object";
  case DbType.SByte: return "sbyte";
  case DbType.Single: return "float";
  case DbType.String: return "string";
  case DbType.StringFixedLength: return "string";
  case DbType.Time: return "TimeSpan";
  case DbType.UInt16: return "ushort";
  case DbType.UInt32: return "uint";
  case DbType.UInt64: return "ulong";
  case DbType.VarNumeric: return "decimal";
  default:
  {
   return "__UNKNOWN__" + column.NativeType;
  }
 }
}

public string GetDefaultValue(ColumnSchema column)
{
 if (column.Name.EndsWith("TypeCode")) return column.Name;
 
 switch (column.DataType)
 {
  case DbType.AnsiString: return "\"\"";
  case DbType.AnsiStringFixedLength: return "\"\"";
  case DbType.Binary: return "{}";
  case DbType.Boolean: return "false";
  case DbType.Byte: return "0";
  case DbType.Currency: return "0";
  case DbType.Date: return "DateTime.Now";
  case DbType.DateTime: return "DateTime.Now";
  case DbType.Decimal: return "0";
  case DbType.Double: return "0";
  case DbType.Guid: return "\"\"";
  case DbType.Int16: return "\"\"";
  case DbType.Int32: return "0";
  case DbType.Int64: return "0";
  case DbType.Object: return "new object()";
  case DbType.SByte: return "0";
  case DbType.Single: return "0";
  case DbType.String: return "\"\"";
  case DbType.StringFixedLength: return "\"\"";
  case DbType.Time: return "TimeSpan";
  case DbType.UInt16: return "\"\"";
  case DbType.UInt32: return "0";
  case DbType.UInt64: return "0";
  case DbType.VarNumeric: return "0";
  default:
  {
   return "__UNKNOWN__" + column.NativeType;
  }
 }
}

public string GetReaderMethod(ColumnSchema column)
{
 switch (column.DataType)
 {
  case DbType.Byte:
  {
   return "GetByte";
  }
  case DbType.Int16:
  {
   return "GetInt16";
  }
  case DbType.Int32:
  {
   return "GetInt32";
  }
  case DbType.Int64:
  {
   return "GetInt64";
  }
  case DbType.AnsiStringFixedLength:
  case DbType.AnsiString:
  case DbType.String:
  case DbType.StringFixedLength:
  {
   return "GetString";
  }
  case DbType.Boolean:
  {
   return "GetBoolean";
  }
  case DbType.Guid:
  {
   return "GetGuid";
  }
  case DbType.Currency:
  case DbType.Decimal:
  {
   return "GetDecimal";
  }
  case DbType.DateTime:
  case DbType.Date:
  {
   return "GetDateTime";
  }
  case DbType.Binary:
  {
   return "GetBytes";
  }
  default:
  {
   return "__SQL__" + column.DataType;
  }
 }
}

public string GetClassName(TableSchema table)
{
 if (table.Name.EndsWith("s"))
 {
  return table.Name.Substring(0, table.Name.Length - 1);
 }
 else
 {
  return table.Name;
 }
}

public string GetSqlDbType(ColumnSchema column)
{
 switch (column.NativeType)
 {
  case "bigint": return "BigInt";
  case "binary": return "Binary";
  case "bit": return "Bit";
  case "char": return "Char";
  case "datetime": return "DateTime";
  case "decimal": return "Decimal";
  case "float": return "Float";
  case "image": return "Image";
  case "int": return "Int";
  case "money": return "Money";
  case "nchar": return "NChar";
  case "ntext": return "NText";
  case "numeric": return "Decimal";
  case "nvarchar": return "NVarChar";
  case "real": return "Real";
  case "smalldatetime": return "SmallDateTime";
  case "smallint": return "SmallInt";
  case "smallmoney": return "SmallMoney";
  case "sql_variant": return "Variant";
  case "sysname": return "NChar";
  case "text": return "Text";
  case "timestamp": return "Timestamp";
  case "tinyint": return "TinyInt";
  case "uniqueidentifier": return "UniqueIdentifier";
  case "varbinary": return "VarBinary";
  case "varchar": return "VarChar";
  default: return "__UNKNOWN__" + column.NativeType;
 }
}

public string GetPrimaryKeyType(TableSchema table)
{
 if (table.PrimaryKey != null)
 {
  //if (table.PrimaryKey.MemberColumns.Count == 1)
  //{
   return GetCSharpVariableType(table.PrimaryKey.MemberColumns[0]);
  //}
  //else
  //{
  // throw new ApplicationException("This template will not work on primary keys with more than one member column.");
  //}
 }
 else
 {
  throw new ApplicationException("This template will only work on tables with a primary key.");
 }
}

public override string GetFileName()
{
 return this.GetClassName(this.SourceTable) + ".cs";
}
</script>
}

posted @ 2006-12-26 18:50 玄铁剑 阅读(422) | 评论 (0)编辑 收藏

  <system.web>
    <caching>
      <outputCacheSettings>
        <outputCacheProfiles>
          <add name="NoneCache" duration="0"   
            varyByParam="none" />
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
  </system.web>


<%@ OutputCache CacheProfile="NoneCache" %>


注意:duration不為零可能會引起頁面狀態錯誤(如按鈕要點幾次的狀況發生,比較奇怪).

posted @ 2006-12-25 15:31 玄铁剑 阅读(215) | 评论 (0)编辑 收藏

 ASP.NET 可以帮助您创建残障人士可以访问的 Web 应用程序。具有辅助功能的 Web 应用程序使用户可以利用屏幕阅读器等辅助技术使用网页。此外,这些应用程序还具有下列优点:
  • 可由有可能是最广泛的用户使用。

  • 所涉及的设计原则往往使所有用户而不仅是残障人士受益。

  • 满足了要求所有 Web 应用程序都具有辅助功能的许多机构的需求。

了解辅助功能指南以及 ASP.NET 如何帮助您符合这些指南,从而可以创建使残障人士更容易与之交互的应用程序。

辅助功能指南

各种组织均发布了如何创建具有辅助功能的应用程序的指南。下面列出一些著名的指南:

  • Web Content Accessibility Guidelines 1.0 (WCAG)(Web 内容可访问性指南 1.0 (WCAG))。

    这些标准由万维网联盟 (W3C) 制订,是许多其他辅助功能标准的基础,其中包括世界各国/地区政府使用的辅助功能标准。

    若要查看 Web 内容可访问性指南,请转至 万维网联盟 (W3C) 网站

    WCAG 指南通过 1 至 3 的定级,为与每种指南相关联的检查点定义了不同级别的优先级。有些机构要求所有网站都符合优先级 1 和优先级 2 检查点。

  • 第 508 节。

    美国政府在类似于 WCAG 的康复法案 (Rehabilitation Act) 的第 508 节定义了辅助功能标准。

    若要了解第 508 节指南,请转至 http://www.section508.gov。

  • Microsoft 辅助功能指南。

    若要查看 Microsoft 辅助功能指南,请转至 Microsoft Accessibility (Microsoft 辅助功能),也可以转至 MSDN Library 并搜索“Accessibility Design Guidelines for the Web”(Web 辅助功能设计指南)。

测试辅助功能

在有限的程度上,可以使用第三方提供的各种工具测试网页符合辅助功能标准的情况。

如果有一个开发环境(如 Microsoft Visual Studio 2005),该环境可能会提供辅助功能测试工具。有关更多信息,请查看相应的产品文档。但是,设计时辅助功能验证工具并不测试动态生成的输出,如由 ASP.NET 服务器控件或您自己的代码呈现的标记。因此,除使用设计时辅助功能验证工具外,还应对页输出进行测试。

自动辅助功能测试无法对页或网站的辅助功能进行全面的诊断。许多辅助功能指南要求您自行判断以确定页面上的功能是否符合指南。例如,自动测试可以确定是否为页面上的所有图像提供了 alt 文本,但无法确定 alt 文本是否描述图像。同样,自动测试无法客观地确定页面上所用颜色的显示对比度对那些要求高对比度文本的读者来说是否足够。因此,要创建真正具有辅助功能的应用程序,必须熟悉相应指南的细节和意图,这样,才能创建页面并满足辅助功能指南。可能无法由工具执行辅助功能检查的另一个示例为:对于只有图形的图像(如圆角表边框),alt 文本必须存在。否则,屏幕阅读器将会读取图像文件。如果 alt 文本为空,屏幕阅读器就会正确地跳过该图像。

ASP.NET 中的辅助功能

多数情况下,ASP.NET 控件呈现标记或公开属性,呈现的标记产生符合辅助功能标准的页面,公开的属性可设置为使页面具有辅助功能。但有时 ASP.NET 控件呈现的输出并不符合所有辅助功能标准。有关详细信息,请参见 ASP.NET 控件和辅助功能

支持辅助功能的常规控件功能

通常情况下,ASP.NET 控件通过下列方法满足辅助功能要求:

  • 提供一种方法用于为任意非文本元素指定文本等效项。

  • 没有颜色依赖项。

  • 呈现表标题和表列标题。

  • 呈现具有 div 元素的 fieldsetlegend 元素。

  • 不需要样式表。

  • 通过样式属性支持定位。

  • 将标签与控件关联。

  • 生成与设备无关的客户端脚本,例如,不限于只响应鼠标单击的脚本。

键盘访问

一个重要的辅助功能就是页面上应提供输入形式的备选功能。实际上,这意味着可通过鼠标完成的任何任务同时也可以通过键盘完成。

ASP.NET 使您可以通过下列方法为页面提供键盘支持:

图像和替换文字

辅助功能指南建议为页面上具有功能性用途的图像(如:作为数据控件呈现的按钮或图像)提供有意义的替换文字。这使屏幕阅读器可以报告页面上每个图像所表示的内容。如果某图像除了具有修饰效果之外没有任何功能性用途,则应将其替换文字设置为一个空字符串,以便屏幕阅读器跳过该图像。

默认情况下,由于 Image ImageButton ImageMap 控件无法自动生成有意义的文本,因此这些控件不呈现任何替换文字。这些文字应由您亲自提供。辅助功能检查程序将不带有替换文字的图像控件标记为违反指南。

对于图像控件,应执行下列操作之一:

  • AlternateText 属性设置为有意义的文本。

  • GenerateEmptyAlternateText 属性设置为 true,以使 ASP.NET Image 控件将空字符串呈现为替换文字。辅助功能检查程序将空替换文字解释为表示特意将该图像标记为不重要。

带有内置图像或链接的控件

有些控件(如 TreeView 控件、 Menu 控件和 Web 部件)将图像或链接作为其标记的一部分呈现。在这种情况下,此类控件应为每个图像或链接创建描述其功能的替换文字。

例如,TreeView 控件为各节点呈现用于展开和折叠按钮的图像。TreeView 控件根据节点的文本为这些图像生成替换文字。默认情况下,对于展开带有文本“Start”的节点的图像,其替换文字呈现为“Expand Start”。通过为 TreeView 控件设置 ExpandImageToolTip CollapseImageToolTip 属性,可以指定您自己的替换文字。

同样,“菜单”命令也为其生成的用于展开和折叠菜单项的链接呈现替换文字。Web 部件控件标题栏中的按钮同样呈现描述各按钮功能的替换文字。

跳过重复链接

辅助技术设备(如屏幕阅读器)必须按各页的显示顺序枚举页面上的每个链接。例如,有时母版页中的某个菜单显示在网站中每页的顶部,此时将强制屏幕阅读器读取每页上的所有项,然后才能获取该页的主要内容。对于这种情况,辅助功能指南建议提供一种使用户跳过重复链接列表的方法。下列控件可实现一种跳过重复链接的方法:

上述每个控件都支持 SkipLinkText 属性。如果将该属性设置为字符串(可以包含任何文本),则控件在以下链接之前呈现一个定位点,这些链接包含的不可见的 .gif 图像带有替换文字。默认情况下,该替换文字为“跳过导航链接”,但您可以对该文本进行配置。该定位点链接到控件后面的另一个定位点。这样,用户可以使用屏幕阅读器和类似的技术跳过控件生成的链接,而不需要对页面的视频显示进行干预。如果将 SkipLinkText 属性设置为空字符串,则控件不呈现定位点标记。

呈现表的控件

辅助功能指南建议 HTML 表包含下列内容:

  • 一个帮助辅助技术标识表用途的标题。

  • 一种标识列标题的方法。

如果使用 Table 控件创建表,则可以显式设置该控件的 Caption 属性。使用 TableHeaderRow 类,并将 TableSection 属性设置为 TableRowSection 类的 TableHeader 枚举,便可以创建表标题。这会使表呈现一个 thead 元素。使用 TableCell 控件创建单元格时,可以将单元格的每个 AssociatedHeaderCellID 属性设置为表标题单元格的 ID。这会使单元格呈现一个 header 属性,该属性将单元格与相应的列标题关联。

下列 ASP.NET 服务器控件可以呈现 HTML 表:

这些控件使您可以设置 CaptionCaptionAlign 属性,以便为所得到的表创建推荐的标题。

对于这些控件,如果设置 UseAccessibleHeader 属性,则此类控件呈现具有 scope 属性的 th 元素来标识列标题。

另两个控件 DataList Repeater 不自动呈现 theadth 元素。但是,您可以为这两个控件定义标题模板。对于 DataList 控件,标题模板呈现 th 元素。Repeater 控件不自动呈现任何标记;您需要为该控件定义标题、正文和脚注模板,在这些模板中可以指定任何标记。如果指定 Repeater 控件应呈现 HTML 表,则应包括适当的标记以符合辅助功能标准。

呈现 div 元素的控件

辅助功能指南建议将长格式划分为多个部分,以便更容易导航。HTML 4.0 引入了 fieldsetlegend 元素,从而使网页开发人员可以将一个格式分为多个部分。

在 ASP.NET 中,可以使用 Panel 控件创建格式中的各个子部分。如果将该控件的 GroupingText 属性设置为字符串,则 Panel 呈现一个 div 元素,该元素包含一个表示内容的 fieldset 元素和一个具有在 GroupingText 属性中使用的字符串的 legend 元素。

有些 Web 部件控件也呈现 div 元素。这些控件自动呈现 fieldsetlegend 元素。

验证控件

在需要输入或者用户在输入数据的过程中出错时,许多网页会在文本框的旁边显示一个星号 (*)。由于星号没有意义,因此应始终在验证程序控件的 Text ErrorMessage 属性中指定有意义的错误信息。

此外,验证程序控件应禁用客户端脚本 (EnableClientScript=false)。

登录控件

登录控件(如 Login ChangePassword PasswordRecovery CreateUserWizard 控件)包含 Label TextBox 和验证程序控件等其他控件。作为网页开发人员,您不必直接控制登录控件所呈现的内容,因此设计了这些具有辅助功能的控件。例如,这些控件具有下列支持辅助功能的行为:

  • 文本框有关联的标签。

  • 输入控件有选项卡索引设置。

但是,如果为这些登录控件创建了模板,则必须在模板中配置这些控件,以便使这些控件符合辅助功能指南。

客户端脚本和 ASP.NET 服务器控件

WCAG 标准建议,页面不要将客户端脚本用于任何功能性用途,而只用于非必要效果(如鼠标翻转)。第 508 节指南允许使用客户端脚本,前提条件是辅助技术可以使用该脚本返回的任何值。

有几个 ASP.NET Web 服务器控件依赖于客户端脚本。例如:

  • LinkButton ImageButton 控件需要客户端脚本执行回发。

  • Calendar 控件要求客户端脚本支持日期链接的单击操作。

  • Web 部件控件依赖于客户端脚本来关闭、最小化和编辑链接。

有关使用客户端脚本的控件的完整列表,请参见 使用客户端脚本的 ASP.NET Web 服务器控件

因此,如果在某页上使用了需要客户端脚本的任何控件,该页就违反了 WCAG 标准。如果您的 Web 应用程序必须完全符合 WCAG 标准,您就不能在页面上使用依赖于客户端脚本的任何控件。但是,对于在页面中使用客户端脚本来说,这些控件确实符合第 508 节标准。

posted @ 2006-12-22 09:20 玄铁剑 阅读(490) | 评论 (0)编辑 收藏

     摘要: 若要在 ASP.NET 中创建具有辅助功能的 Web 应用程序,必须了解 ASP.NET 服务器控件支持辅助功能的方式。在许多情况下,必须对控件进行配置以创建符合辅助功能指南的标记。在一些情况下,ASP.NET 服务器控件不能用于必须完全符合 Web Content Accessibility Guidelines 1.0 (WCAG)(Web 内容可访问性指南 1.0 (WCAG))优先级为 1...  阅读全文

posted @ 2006-12-22 09:18 玄铁剑 阅读(439) | 评论 (0)编辑 收藏

    private void MergeRows(DataGrid grid)
    {
        int row, icur, ispan;
        int icol = grid.Columns.Count - 1;
        int irow_count = grid.Items.Count - 1;
        string strtmp;

        for (int col = 0; col <= icol; col++)
        {
            if (grid.Columns[col].Visible == false)
                continue;
            ispan = 1;
            row = 0;
            icur = 0;
            while (row <= irow)
            {
                strtmp = grid.Items[icur].Cells[col].Text.ToString();
                row += 1;
                if (row <= irow)
                {
                    if (grid.Items[row].Cells[col].Text.ToString().Equals(strtmp))
                    {
                        ispan += 1;
                        grid.Items[icur].Cells[col].RowSpan = ispan;
                        grid.Items[row].Cells[col].Visible = false;
                    }
                    else
                    {
                        ispan = 1;
                        icur = row;
                    }
                }
            }
        }
    } 

posted @ 2006-12-20 21:39 玄铁剑 阅读(432) | 评论 (0)编辑 收藏

     摘要: BT下載 伊甸園娛樂[good]BT中國BT綜合下載芭芭秀BT之家寬寬遊戲網 BT精灵交流 C#.NETRichTextBox for .net C#跨平台Mono asp.net ASP.NET Start Kit MSDN Start Kit 台灣 Code Project[good] Web mail server code 垃圾郵件過濾 .net開發書籍 .net framewo...  阅读全文

posted @ 2006-12-20 21:27 玄铁剑 阅读(1145) | 评论 (1)编辑 收藏

仅列出标题
共13页: First 5 6 7 8 9 10 11 12 13