DataGrid 有关各种问题.............

今天上班的时候就碰到这个问题,郁闷了半天!!
本来想想反正是DataGrid里面的列,还不一样么,结果问题出来了,列里面的字符太多,把DataGrid弄得N难看,更郁闷中...

慢慢思考问题出在那里,后来我干脆重新做一遍,结果发现,要是把列设定成BoundColumn,然后再用:
if(e.Item.Cells[2].Text.ToString().Length>25)
            
{
                e.Item.Cells[
2].Text=e.Item.Cells[2].Text.Substring(0,25)+"";
            }
这一段代码来处理,是完全正确的!
后来再把列设定成HyperLinkColumn,问题跟刚开始一样!
得出结论:上面的方法只能对列为BoundColumn的时候才有用(说得不恰当的地方,请指出!)!
但是要怎么要处理呢,虽然说不知道问题所在是件最郁闷的事,要是知道问题所在,不知道解决也是件N郁闷的事,我在想,是不是人品出了问题,嘻嘻!!
干脆找了个人品计算器来玩了下,分数相当高,还有84分,不错啊!!

想玩的来玩玩啊!!

后来第一时间想到了CSDN,哈哈.不到半个小时就有好多人帮我回答!

后来一个朋友帮我解决了,方法如下:
后台添加:
protected string FormatString(object o,int length)
{
string s = o.ToString();
if(s.Length > length)
return s.Substring(0,length) + "";
return s;
}

前台改变列为模板列:
<asp:TemplateColumn>
<ItemTemplate>
<asp:HyperLink id=HyperLink1 runat="server" NavigateUrl='<%# DataBinder.Eval(Container, "DataItem.News_ID", "NewsShow.aspx?ID={0}") %>' Text='<%# FormatString(DataBinder.Eval(Container, "DataItem.News_Subject"),10) %>' Target="_blank">
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateColumn>
真是太感谢他了!!

CSDN的地址:http://community.csdn.net/Expert/topic/4893/4893536.xml?temp=.2914545
posted @ 2006-07-20 16:54 Field 阅读(44) | 评论 (2)编辑 收藏

2006年7月15日 #

摘要:
posted @ 2006-07-15 16:37 Field 阅读(28) | 评论 (0)编辑 收藏

2006年7月20日 #

今天上班的时候就碰到这个问题,郁闷了半天!!
本来想想反正是DataGrid里面的列,还不一样么,结果问题出来了,列里面的字符太多,把DataGrid弄得N难看,更郁闷中...

慢慢思考问题出在那里,后来我干脆重新做一遍,结果发现,要是把列设定成BoundColumn,然后再用:
if(e.Item.Cells[2].Text.ToString().Length>25)
            
{
                e.Item.Cells[
2].Text=e.Item.Cells[2].Text.Substring(0,25)+"";
            }
这一段代码来处理,是完全正确的!
后来再把列设定成HyperLinkColumn,问题跟刚开始一样!
得出结论:上面的方法只能对列为BoundColumn的时候才有用(说得不恰当的地方,请指出!)!
但是要怎么要处理呢,虽然说不知道问题所在是件最郁闷的事,要是知道问题所在,不知道解决也是件N郁闷的事,我在想,是不是人品出了问题,嘻嘻!!
干脆找了个人品计算器来玩了下,分数相当高,还有84分,不错啊!!

想玩的来玩玩啊!!

后来第一时间想到了CSDN,哈哈.不到半个小时就有好多人帮我回答!

后来一个朋友帮我解决了,方法如下:
后台添加:
protected string FormatString(object o,int length)
{
string s = o.ToString();
if(s.Length > length)
return s.Substring(0,length) + "";
return s;
}

前台改变列为模板列:
<asp:TemplateColumn>
<ItemTemplate>
<asp:HyperLink id=HyperLink1 runat="server" NavigateUrl='<%# DataBinder.Eval(Container, "DataItem.News_ID", "NewsShow.aspx?ID={0}") %>' Text='<%# FormatString(DataBinder.Eval(Container, "DataItem.News_Subject"),10) %>' Target="_blank">
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateColumn>
真是太感谢他了!!

CSDN的地址:http://community.csdn.net/Expert/topic/4893/4893536.xml?temp=.2914545
posted @ 2006-07-20 16:54 Field 阅读(44) | 评论 (2)编辑 收藏

2006年7月19日 #

今天在做返回上一级的操作时,本来直接用:
javascript:window.history.go(-1)
这个在原理上来说是没有错的,可是,我要返回的上一页是通过传递ID来显示页面的,所以这种方面在这里就不起什么作用了.
后来在CSDN上看到了解决方法:
先在Page_Load里面加上这一句
if(!Page.IsPostBack)
            
{                                ViewState["retu"]=Request.UrlReferrer.ToString();
            }
然后再在Button的Click事件里面加上下面一句就OK
Response.Redirect(ViewState["retu"].ToString());

这样,我的问题就解决了!

此问题在CSDN上的地址:
http://topic.csdn.net/t/20030115/15/1361240.html
posted @ 2006-07-19 17:22 Field 阅读(9) | 评论 (1)编辑 收藏

2006年7月17日 #

例子如下:

初始代码如下:
 1protected System.Web.UI.WebControls.DataGrid DataGrid1;
 2        private DataSet ds = new DataSet();
 3    
 4        private void Page_Load(object sender, System.EventArgs e)
 5        {
 6            // 在此处放置用户代码以初始化页面
 7            if(!this.IsPostBack)
 8            {
 9                string strConnection = ConfigurationSettings.AppSettings["ConnectionString"].ToString();
10                SqlConnection myConnection = new SqlConnection(strConnection);
11                SqlDataAdapter myAdapter = new SqlDataAdapter("SELECT CategoryID,CategoryName, Description FROM Categories",myConnection);
12                myAdapter.Fill(ds);
13                this.DataGrid1.DataSource = ds.Tables[0].DefaultView;
14                this.DataGrid1.DataKeyField = "CategoryID";
15                this.DataGrid1.DataBind();
16            }

17

有关删除的代码如下:
 1private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
 2        {
 3            if(e.Item.ItemIndex!=-1)
 4            {
 5                e.Item.Cells[1].Text=Convert.ToString((e.Item.ItemIndex+1));
 6            }

 7
 8            switch(e.Item.ItemType)
 9            {
10                case ListItemType.Item:
11                case ListItemType.AlternatingItem:
12                case ListItemType.EditItem:
13                {
14                    Button btn = (Button)e.Item.FindControl("btnDelete");
15                    btn.Attributes.Add("onclick""return confirm('你是否确定删除这条记录');");
16                    break;
17                }

18            }

19        }

20
21        private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
22        {
23            if(e.CommandName == "Delete")
24            {
25                this.DeleteRow(this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString());
26            }

27            Response.Redirect("WebForm1.aspx");//能不能不要是直接加载本页面?
28        }

29
30        private void DeleteRow(string i)
31        {
32            string strConnection = ConfigurationSettings.AppSettings["ConnectionString"].ToString();
33            SqlConnection myConnection = new SqlConnection(strConnection);
34            SqlCommand cmd = new SqlCommand("DELETE FROM Categories WHERE (CategoryID = "+i+")",myConnection);
35            myConnection.Open();
36            cmd.ExecuteNonQuery();
37            myConnection.Close();
38        }

39

前台代码如下:

 1<body MS_POSITIONING="GridLayout">
 2        <form id="Form1" method="post" runat="server">
 3            <FONT face="宋体">
 4                <asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 48px; POSITION: absolute; TOP: 88px" runat="server"
 5                    Width="632px">
 6                    <Columns>
 7                        <asp:TemplateColumn HeaderText="删除">
 8                            <HeaderTemplate>
 9                                删除
10                            </HeaderTemplate>
11                            <ItemTemplate>
12                                <asp:Button id="btnDelete" runat="server" CommandName="Delete" Text="Delete"></asp:Button>
13                            </ItemTemplate>
14                        </asp:TemplateColumn>
15                        <asp:TemplateColumn HeaderText="序号"></asp:TemplateColumn>
16                    </Columns>
17                </asp:DataGrid></FONT>
18        </form>
19    </body>

在这里要是没有添加:
Response.Redirect("WebForm1.aspx");//能不能不要是直接加载本页面?
这一句,没有办法看出没有删除(看了数据库才知道!)

有没有办法说不用跳转加本页,一样可以直接看到是否有删除?
posted @ 2006-07-17 17:51 Field 阅读(14) | 评论 (1)编辑 收藏

    内容篇幅较长,请点击这里阅读全文。
posted @ 2006-07-17 08:46 Field 阅读(31) | 评论 (0)编辑 收藏

2006年7月15日 #

摘要:
posted @ 2006-07-15 16:37 Field 阅读(28) | 评论 (0)编辑 收藏

2006年7月14日 #

原文地址:http://www.microsoft.com/china/MSDN/library/Windev/WindowsVista/gamedevsudoku.mspx?mfr=true

每次要学点新东西时,我都会发现使用教程比阅读文档要简单、省事得多。假定大多数人都有同感,难道您真的会在尝试使用某个东西之前先阅读说明吗?我肯定不会。为此,我已经决定直接付诸行动,演练如何构建一个 Windows Presentation Foundation (WPF) 应用程序。由于这是 Coding4Fun,而且世界上有足够多的企业-Web 2.0-数据-门户-小玩意,那么就让我们面对这个现实,来准备做一个游戏吧!遗憾的是,我认为在此直接制作 Halo 3 游戏并不现实,因此,我认为更小的游戏可能更合适,也就是说在这些教程结束时能够完成的游戏,比如说数独游戏。嗨,好处是您可以在工作中玩数独游戏而不会受惩罚!好吧,那么我们要怎么开始呢?按以下顺序安装:

Visual C# 2005 Express Edition

WinFX February 2006 CTP

Windows SDK February 2006 CTP

Visual Studio Extensions for WinFX February 2006 CTP

还需要运行 Windows XP SP2、Windows Server 2003 SP1 或 Vista February CTP。

当然,我的工作站上碰巧安装了所有这些软件(太好了)。不过既然一切都已经安装好了,就让我们开始吧。激活 VC#,新建一个项目,然后选择"WinFX Windows Application"。(如果看不到这一项,您应该确保安装了 Visual Studio Extensions,因为该项是一项新增的内容。)。我输入"SudokuFX"作为项目名称,您将在屏幕快照中看到该项目名,但这取决于您给项目起了什么名字。您马上就会看到以下内容:

<Window x:Class="SudokuFX.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SudokuFX" Height="300" Width="300" >
        <Grid>
        </Grid>
        </Window>
        

这是 XAML,Microsoft 新的声明性编程语言。XAML 中的类可以同时具有代码(C# 或 VB.NET)组件和声明性 (XAML) 组件。Window 标记的 x:Class 属性指定了我们正在定义的类的 C# 组件名。C# 部分应当如下所示:

namespace SudokuFX
        {
        public partial class Window1 : Window
        {
        public Window1()
        {
        InitializeComponent();
        }
        }
        }
        

编译并运行该程序后,这两部分结合在一起从而创建一个完整的 Window1 类,该类从 WinFX 提供的 System.Windows.Window 类派生。在这里,您唯一需要了解的还不明确的事情是,用 XAML 声明的所有对象均可从代码访问,反之亦然。事实上,根本不需要使用 XAML,您也可以使用相同的 API 编写一个类!嵌套元素放在一个集合中,该集合存储为这些元素父级的 Children 属性,或者存储为分配给 Content 属性的一个对象。换言之,这段 XAML 代码创建了一个 Grid 实例,并将其放在窗口的 Content 属性中。

那么,我们如何开始着手设计应用程序的布局呢?基本上,理想的布局是:顶端有一个标题,左边是游戏菜单(类似于 Windows 资源管理器中的"任务"窗格),右边是游戏计时信息,底部是移动历史记录,中间是板。当然,这都应该与分辨率无关,而且能够动态调整大小和流动。(如果您以前使用过 Windows 窗体,那么当您偏头痛发作时,额头可能已经开始冒汗了,不过不用担心,动态调整大小和流是 WinFX 的默认设置)。最适合该任务的容器是明显命名的 DockPanel。DockPanel 是一个容器控件,它根据子级要放置到哪一边来安排它们;然后,添加的最后一个元素用于填充剩余空间。例如,用以下内容替代 Grid 标记:

<DockPanel>
        <TextBlock Background="Red" DockPanel.Dock ="Top" FontSize ="36">
        Sudoku
        </TextBlock>
        <StackPanel Background="Green" DockPanel.Dock ="Left">
        <Button>A</Button>
        </StackPanel>
        <StackPanel Background="Blue" DockPanel.Dock ="Right">
        <Button>B</Button>
        </StackPanel>
        <ListBox Background ="Gray" DockPanel.Dock="Bottom"/>
        <StackPanel Background ="Yellow"/>
        </DockPanel>
        

DockPanel.Dock 语法用于引用每个子级,但要特定于容器的属性。另一个可以说明这种情况的示例是 Canvas.Left 属性,它与 Canvas 中的元素一起使用,Canvas 是一个允许显式确定元素位置的容器控件。StackPanel 容器在垂直堆栈或水平堆栈中排列自己的子级:向上、向下、向左,或向右。在该示例中,我添加了一些按钮来填补面板,这样面板就不会缩小到没有了。我还指定了一些过分鲜艳刺眼的背景色(稍后会删除),以便准确显示所有内容的摆放位置。如果编译并运行该程序,会得到以下奇怪的结果:


好吧,现在该努力编写一些代码来运行基本的用户界面 (UI) 了。首先,我们来布置左面板。其中将包括主菜单和新的游戏设置。我们应该将它们放在扩展器控件中,以防任何使用我们程序的人以 800x600 的分辨率运行(我知道这很恐怖,但我见过)。

<Expander IsExpanded ="True" Header ="Main Menu">
        <StackPanel>
        <Button>New Game</Button>
        <Button>Load Game</Button>
        <Button>Save Game</Button>
        <Button>Quit</Button>
        </StackPanel>
        </Expander>
        <Expander IsExpanded ="True" Header ="New Game Settings">
        <StackPanel>
        <TextBlock>Board Size:</TextBlock>
        <ComboBox IsEditable ="False">
        <ComboBoxItem IsSelected ="True">9x9</ComboBoxItem>
        <ComboBoxItem>16x16</ComboBoxItem>
        <ComboBoxItem>25x25</ComboBoxItem>
        <ComboBoxItem>36x36</ComboBoxItem>
        </ComboBox>
        </StackPanel>
        </Expander>
        </StackPanel>
        

这会生成以下界面:


好吧,现在可能看起来不太可怕,但等一下:很快就会有其他内容了!以类似方式充实该 UI 的其余部分,并为板(在以后的教材中,我们将制作板)添加虚拟图像,我们将获得以下界面:


现在,我们应该如何改进该 UI 的外观呢?一种方法是单独调整控件的所有属性,使其外观看起来更好;另一种方法是使用某种皮肤设置。遗憾的是,这两种方法向您的代码中添加了一堆乱七八糟的东西,且难以维护。相反,我们可以使用 WPF 的样式概念。通过定义一组新的默认属性值,WPF 使得在给定范围内(例如,作为一个整体的应用程序、一个特殊的对话框,或者一个容器)自定义控件变得十分简单。可以通过将样式添加到其他对象的 Resources 集合中来实现该任务。在 XAML 中,如果要将一个更复杂的对象或对象集合分配给一个属性,可以将该属性的语法从 Property="Value" 扩展为语法:

<Object.Property>
        <ValueObject/>
        </Object.Property>
        

例如,如果没有显式设置为其他颜色,下面的代码将蓝色指定为应用程序中所有按钮的背景色:

<Application.Resources>
        <Style TargetType ="{x:Type Button}">
        <Setter Property ="Background" Value ="Blue"/>
        </Style>
        </Application.Resources>
        

也可以使用 x:Key 属性来命名样式。之所以使用 x:Key 而不使用 x:Name,是因为 <Application.Resources> 实际上是一个键值对列表。例如,我们可以定义:

<Application.Resources>
        <Style x:Key ="BlueButton" TargetType ="{x:Type Button}">
        <Setter Property ="Background" Value ="Blue"/>
        </Style>
        </Application.Resources>
        

这段代码创建了一种仅适用于某些按钮的样式,这些按钮通过其 Style 属性引用该样式。例如:

<Button Style="{StaticResource BlueButton}"/>
        

也可以定义窗口、面板或其他具有 Resources 属性的对象中的资源。当代码引用某个资源时,进行应用程序级别的搜索。这样,<Window.Resources> 中定义的样式或其他资源就只能在该窗口内应用。

到目前为止,我尚未解释过一直使用的括号符号。本质上说,括号用于声明对其他对象的引用,而不是对其进行实例化。例如,{x:Type Button} 引用 Button 类,而 {StaticResource BlueButton} 搜索具有"BlueButton"键的项目的资源层次。StaticResource 指令指出,该搜索仅在首次创建对象时执行;相反,DynamicResource 指令指定该值应不断更新。

现在,我们可以开始添加一种样式以改善扩展器的外观。我将以下内容添加到 <Application.Resources> 部分中:

<Style TargetType ="{x:Type Expander}">
        <Setter Property ="Background">
        <Setter.Value>
        <LinearGradientBrush StartPoint ="0,0" EndPoint ="1,0">
        <LinearGradientBrush.GradientStops>
        <GradientStop Color ="LightGray" Offset ="0"/>
        <GradientStop Color ="Gray" Offset ="1"/>
        </LinearGradientBrush.GradientStops>
        </LinearGradientBrush>
        </Setter.Value>
        </Setter>
        <Setter Property ="BorderBrush" Value ="DimGray"/>
        <Setter Property ="BorderThickness" Value ="1"/>
        <Setter Property ="Margin" Value ="5"/>
        <Setter Property ="HorizontalContentAlignment" Value ="Stretch"/>
        <Setter Property ="Foreground" Value ="White"/>
        <Setter Property ="VerticalContentAlignment" Value ="Stretch"/>
        </Style>
        

这是一种比较简单的样式,它很好地演示了双属性分配语法。背景设置为两种灰度之间的水平渐变,其余属性设定为与背景很好融合的合理的默认值。通过在扩展器内容中添加一个 Border 标记,我还在控件内部的周围添加了一个额外的边框,如下所示:

<Expander IsExpanded ="True" Header="Main Menu">
        <Border Margin ="5" Padding ="10"
        Background ="#77FFFFFF" BorderBrush ="DimGray" BorderThickness ="1">
        <StackPanel>
        <Button>New Game</Button>
        <Button>Load Game</Button>
        <Button>Save Game</Button>
        <Button>Quit</Button>
        </StackPanel>
        </Border>
        </Expander>
        

Margin 属性指定扩展器控件外部的边框间距,Padding 属性指定内部的额外间距。请注意,只有容器控件才有内部间距。这两个值由四个逗号分隔的值(分别针对左、上、右、下)指定,如果四个值相同(如此处所示),则用一个数字指定。

如果您觉得这有点儿像杂牌军,那就对了。事实上,我本来可以使用自定义样式在控件自身内部包括额外边框。为此,您可以修改所谓的控件模板,但那是另一个话题,我不会在此进行讨论。不要担心,我们稍后会回来修正这个问题。制定了其他一些样式并为窗口背景添加了一个很好的渐变之后,应用程序看上去好多了……嗯,至少色彩更丰富了!如果下载该代码,您可以查看这些样式。


最后,为了完成教程的这一部分,我们添加一些简单的事件处理以使 Quit 按钮工作。实际上非常简单。只需定义一个符合 Window1 类中 RoutedEventHandler 委托的方法。例如:

void QuitClicked(object sender, RoutedEventArgs e)
        {
        this.Close();
        }
        

然后,只需将按钮的 Clicked 属性设置为处理程序的名称,如下所示:

<Button Click ="QuitClicked">Quit</Button>
        

现在,如果您单击 Quit 按钮,程序将退出。这实际上是处理简单事件所需的一切操作!

好了,眼下没有别的事情了。我希望该教程至少让您对 WPF 应用程序的工作方式有所了解,以及如何开始构建您的第一个 WPF 应用程序。我们只是向您初步介绍了使用该框架和 .NET 2.0 可以完成的工作!别走开,本教程接下来的几部分将完成该应用程序,并介绍以下几个很酷的功能:

数据绑定:UI 将自动显示并操作程序的对象

自定义控件以及控件皮肤:完全更改现有控件的外观,或者创建自己的控件

很酷的效果、反射、过渡以及自动运行的动画

触发器:将 UI 配置为自己管理,控制其外观而无需任何代码

创建插件系统:将使用任何 .NET 语言编写的插件加载到一个沙箱中

使用 .NET Framework 编写多线程代码

继续编写代码!

转到原英文页面

posted @ 2006-07-14 09:13 Field 阅读(15) | 评论 (0)编辑 收藏

只能输入数字:"^[0-9]*$"。
只能输入n位的数字:"^\d{n}$"。
只能输入至少n位的数字:"^\d{n,}$"。
只能输入m~n位的数字:。"^\d{m,n}$"
只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。
只能输入非零的正整数:"^\+?[1-9][0-9]*$"。
只能输入非零的负整数:"^\-[1-9][]0-9"*$。
只能输入长度为3的字符:"^.{3}$"。
只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"
验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。
验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。

利用正则表达式限制网页表单里的文本框输入内容:

用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"

用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"

用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1

s="http://www.9499.net/page1.htm"
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)

匹配双字节字符(包括汉字在内):[^\x00-\xff]

应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}

匹配空行的正则表达式:\n[\s| ]*\r

匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/

匹配首尾空格的正则表达式:(^\s*)|(\s*$)

 

String.prototype.trim = function()
{
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

利用正则表达式分解和转换IP地址:

下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:

function IP2V(ip)
{
 re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g  //匹配IP地址的正则表达式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
 throw new Error("Not a valid IP address!")
}
}

不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))


符号解释:

字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern) 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
[xyz] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\cx 匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
\W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。.
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。
\n 标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm 标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。

posted @ 2006-07-14 08:57 Field 阅读(12) | 评论 (0)编辑 收藏

    内容篇幅较长,请点击这里阅读全文。
posted @ 2006-07-14 08:56 Field 阅读(6) | 评论 (0)编辑 收藏

2006年7月13日 #

原文地址:http://msdn2.microsoft.com/zh-CN/library/9cx2f3ks.aspx

DataList Web 服务器控件 

DataList Web 服务器控件用可自定义的格式显示各行数据库信息。在所创建的模板中定义数据显示布局。可以为项、交替项、选定项和编辑项创建模板。也可以使用标题、脚注和分隔符模板自定义 DataList 的整体外观。通过在模板中包括 Button Web 服务器控件,可将列表项连接到代码,而这些代码允许用户在显示、选择和编辑模式之间进行切换。

下列主题提供有关如何向 ASP.NET 网页添加 DataList 控件以及如何对这些控件进行编程的信息。

本节内容

相关章节

通过 ASP.NET 访问数据

提供有关使用 ASP.NET 控件来处理数据的常规信息。

ASP.NET Web 服务器控件概述

提供有关使用 ASP.NET Web 服务器控件的常规信息。

各 ASP.NET Web 服务器控件

提供有关其他 Web 服务器控件的信息。

数据 Web 服务器 (ASP.NET) 控件

提供指向有关其他数据控件的主题的链接。

ASP.NET Web 服务器控件模板

提供指向讨论如何创建模板的主题的链接。

posted @ 2006-07-13 15:08 Field 阅读(5) | 评论 (0)编辑 收藏

原文地址:http://msdn2.microsoft.com/zh-CN/library/h59db326.aspx

大多数 Web 服务器控件具有默认的布局和外观,但是您可以通过设置属性或使用样式来操纵它们。部分 Web 服务器控件还允许您使用模板来自定义其外观。

模板是一组 HTML 元素和控件,它们构成组件特定部分的布局。例如,在 DataList Web 服务器控件中,您可以使用 HTML 元素和控件的组合来创建列表中每行的布局。同样,GridView Web 服务器控件对网格中的每行都具有一个默认的外观。但您可以通过为各列定义不同的模板,来自定义网格的外观。

Note注意

模板不同于样式。模板定义控件某一部分的内容,如 DataList 控件中某行的内容。而样式指定元素的外观,如颜色、字体等。样式可以作为整体应用于控件(例如,设置 GridView 控件的字体)和模板项。

模板由 HTML 和嵌入的服务器控件组成。当控件在 ASP.NET 网页中运行时,控件框架呈现模板的内容,而不是控件的默认 HTML。

哪些控件支持模板?

并非所有 Web 服务器控件都支持模板。在大多数情况下,复杂的控件支持模板。这些控件包括 GridViewDataListRepeaterFormViewDetailsViewLogin 及其他控件。

每一控件支持的一组模板略有不同,这些模板指定控件的不同部分的布局,例如标题、脚注、项和所选项。您可以为上述任一或全部对象指定模板,具体情况取决于您要自定义哪一对象。在 GridView 控件中,您可以为列(而非行)指定模板。

下表概述了支持模板的 Web 服务器控件。

 
控件 模板

ChangePassword

  • ChangePasswordTemplate

  • SuccessTemplate

DataList

  • HeaderTemplate

  • FooterTemplate

  • ItemTemplate

  • AlternatingItemTemplate

  • SeparatorTemplate

  • SelectedItemTemplate

  • EditItemTemplate

DetailsView

  • HeaderTemplate

  • FooterTemplate

  • PagerTemplate

  • EmptyDataTemplate

FormView

  • ItemTemplate

  • EditItemTemplate

  • InsertItemTemplate

  • HeaderTemplate

  • FooterTemplate

  • PagerTemplate

  • EmptyDataTemplate

GridView

  • PagerTemplate

  • EmptyDataTemplate

Menu

  • DynamicTemplate

  • StaticTemplate

Repeater

  • HeaderTemplate

  • FooterTemplate

  • ItemTemplate

  • AlternatingItemTemplate

  • SeparatorTemplate

SiteMapPath

  • CurrentNodeTemplate

  • RootNodeTemplate

  • NodeTemplate

  • PathSeparatorTemplate

Wizard

  • FinishNavigationTemplate

  • HeaderTemplate

  • StartNavigationTemplate

  • StepNavigationTemplate

  • SideBarTemplate

创建模板

可以直接在 .aspx 文件中创建模板。模板创建为 XML 声明。下面的示例演示如何使用 DataList 控件中的模板来显示一个包含雇员姓名、电话号码和电子邮件地址的列表。在使用数据绑定控件的 ItemTemplate 中指定雇员信息的布局。

Note注意

如果您使用的是可视化设计器(如 Visual Studio 2005),则通常可以使用可视化工具创建和编辑模板。有关更多信息,请参见如何:使用设计器创建 Web 服务器控件模板

Visual Basic
<asp:datalist id="DataList1" runat="server">
        <HeaderTemplate>
        Employee List
        </HeaderTemplate>
        <ItemTemplate>
        <asp:label id="Label1" runat="server"
        Text='<%# DataBinder.Eval(Container, "DataItem.EmployeeName")%>'></asp:label>
        <asp:label id="Label2" runat="server"
        Text='<%# DataBinder.Eval(Container, "DataItem.PhoneNumber")%>'></asp:label>
        <asp:Hyperlink id="Hyperlink1" runat="server"
        Text='<%# DataBinder.Eval(Container, "DataItem.Email") %>'
        NavigateURL='<%# DataBinder.Eval(Container, "DataItem.Link") %>'>
        </asp:Hyperlink>
        </ItemTemplate>
        </asp:datalist>
        
<asp:datalist id="DataList1" runat="server">
        <HeaderTemplate>
        Employee List
        </HeaderTemplate>
        <ItemTemplate>
        <asp:label id="Label1" runat="server"
        Text='<%# DataBinder.Eval(Container, "DataItem.EmployeeName")%>'></asp:label>
        <asp:label id="Label2" runat="server"
        Text='<%# DataBinder.Eval(Container, "DataItem.PhoneNumber")%>'></asp:label>
        <asp:Hyperlink id="Hyperlink1" runat="server"
        Text='<%# DataBinder.Eval(Container, "DataItem.Email") %>'
        NavigateURL='<%# DataBinder.Eval(Container, "DataItem.Link") %>'>
        </asp:Hyperlink>
        </ItemTemplate>
        </asp:datalist>
        

请参见

posted on 2006-07-21 14:40  winglzz  阅读(1271)  评论(0)    收藏  举报

导航