博客园 首页 发新随笔
发新文章 联系 订阅订阅管理

2008年1月22日

posted @ 2008-01-22 02:05 辛迪 阅读(602) 评论(0)  编辑

2007年12月3日

Ajax原意本是让人利用异步获取XML内容,以实现无刷新的网页效果
asp.net ajax已将底层内容封装
实现起来远比自写xmlhttp来的方便,至少浏览器兼容方面要强得很多
下面以一个www.asp.net的示例说明一下利用microsoft ajax library来简单异步获取xml文档的方法


// 返回XML的Web 请求
function OnSucceededXml(executor, eventArgs) 
{
    
if (executor.get_responseAvailable()) 
    
{
       
        
if (document.all)
            resultElementId.innerText 
+= executor.get_xml().xml;
        
else
            
// Firefox 
            resultElementId.textContent += "First node[首节点]: " + 
                executor.get_xml().documentElement.nodeName;

    }

    
else
    
{
        
if (executor.get_timedOut())
            alert(
"超时");
        
else
            
if (executor.get_aborted())
                alert(
"失败");
    }

}
 
function GetXml()
{
    
//创建WebRequest对象
    wRequest =  new Sys.Net.WebRequest();

    
//设置请求文件 
    wRequest.set_url("index.xml");
  
    
<SPAN style="COLOR: #
posted @ 2007-12-03 01:56 辛迪 阅读(70) 评论(0)  编辑
 

一..Net Framework

1.  如何获得系统文件夹

使用System.Envioment类的GetFolderPath方法;例如:

Environment.GetFolderPath( Environment.SpecialFolder.Personal )

2.  如何获得正在执行的exe文件的路径

1)  使用Application类的ExecutablePath属性

2)  System.Reflection.Assembly.GetExecutingAssembly().Location

3.  如何检测操作系统的版本

使用Envioment的OSVersion属性,例如:

OperatingSystem os = Environment.OSVersion;

MessageBox.Show(os.Version.ToString());

MessageBox.Show(os.Platform.ToString());

4.  如何根据完整的文件名获得文件的文件名部分、

使用System.IO.Path类的方法GetFileName或者GetFileNameWithoutExtension方法

5.  如何通过文件的全名获得文件的扩展名

使用System.IO.Path.GetExtension静态方法

6.  Vb和c#的语法有什么不同click here

7.  如何获得当前电脑用户名,是否联网,几个显示器,所在域,鼠标有几个键等信息

使用System.Windows.Forms. SystemInformation类的静态属性

8.  修饰Main方法的[STAThread]特性有什么作用

标示当前程序使用单线程的方式运行

9.  如何读取csv文件的内容

通过OdbcConnection可以创建一个链接到csv文件的链接,链接字符串的格式是:"Driver={Microsoft Text Driver (*.txt;*.csv)};Dbq="+cvs文件的文件夹路径+"          Extensions=asc,csv,tab,txt; Persist Security Info=False";

创建连接之后就可以使用DataAdapter等存取csv文件了。

详细信息见此处

10. 如何获得磁盘开销信息,代码片断如下,主要是调用kernel32.dll中的GetDiskFreeSpaceEx外部方法。

public sealed class DriveInfo
{
    [DllImport("kernel32.dll", EntryPoint = "GetDiskFreeSpaceExA")]
    private static extern long GetDiskFreeSpaceEx(string lpDirectoryName,
        out long lpFreeBytesAvailableToCaller,
        out long lpTotalNumberOfBytes,
        out long lpTotalNumberOfFreeBytes);

    public static long GetInfo(string drive, out long available, out long total, out long free)
    {
        return GetDiskFreeSpaceEx(drive, out available, out total, out free);
    }

    public static DriveInfoSystem GetInfo(string drive)
    {
        long result, available, total, free;
        result = GetDiskFreeSpaceEx(drive, out available, out total, out free);
        return new DriveInfoSystem(drive, result, available, total, free);
    }
}

public struct DriveInfoSystem
{
    public readonly string Drive;
    public readonly long Result;
    public readonly long Available;
    public readonly long Total;
    public readonly long Free;

    public DriveInfoSystem(string drive, long result, long available, long total, long free)
    {
        this.Drive = drive;
        this.Result = result;
        this.Available = available;
        this.Total = total;
        this.Free = free;
    }
}

可以通过DriveInfoSystem info = DriveInfo.GetInfo("c:");来获得指定磁盘的开销情况

11 .如何获得不区分大小写的子字符串的索引位置

         1 )通过将两个字符串转换成小写之后使用字符串的 IndexOf 方法:

string strParent = "The Codeproject site is very informative.";

string strChild = "codeproject";

// The line below will return -1 when expected is 4.
int i = strParent.IndexOf(strChild);

// The line below will return proper index
int j = strParent.ToLower().IndexOf(strChild.ToLower());

2)  一种更优雅的方法是使用System.Globalization命名空间下面的CompareInfo类的IndexOf方法:

using System.Globalization;

string strParent = "The Codeproject site is very informative.";

string strChild = "codeproject";
// We create a object of CompareInfo class for a neutral culture or a culture insensitive object
CompareInfo Compare = CultureInfo.InvariantCulture.CompareInfo;

int i = Compare.IndexOf(strParent,strChild,CompareOptions.IgnoreCase);

二. OOPs

1. 什么是复制构造函数

我们知道构造函数是用来初始化我们要创建实例的特殊的方法。通常我们要将一个实例赋值给另外一个变量c#只是将引用赋值给了新的变量实质上是对同一个变量的引用,那么我们怎样才可以赋值的同时创建一个全新的变量而不只是对实例引用的赋值呢?我们可以使用复制构造函数。

我们可以为类创造一个只用一个类型为该类型的参数的构造函数,如:

public Student(Student student)
{
    this.name = student.name;
}

使用上面的构造函数我们就可以复制一份新的实例值,而非赋值同一引用的实例了。

class Student
{
    private string name;
    public Student(string name)
    {
        this.name = name;
    }
    public Student(Student student)
    {
        this.name = student.name;
    }
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }
}
class Final
{
    static void Main()
    {
        Student student = new Student("A");
        Student NewStudent = new Student(student);
        student.Name = "B";
        System.Console.WriteLine("The new student's name is {0}", NewStudent.Name);
    }
}

2 .什么是只读常量

就是静态的只读变量,它通常在静态构造函数中赋值。

class Numbers
{
    public readonly int m;
    public static readonly int n;

    public Numbers(int x)
    {
        m = x;
    }

    static Numbers()
    {
        n = 100;
    }

} //其中n就是一个只读的常量,对于该类的所有实例他只有一种值,而m则根据实例不同而不同

三.VS.Net IDE

1. 2请看原作

3.如何改变region的颜色

   通过工具 à 选项 à 环境 à 字体和颜色 à 可折叠文本设置

 

四.WinForm

1.如何使winForm不显示标题栏?

通过设置form的Text属性为空字符串,设置ControlBox属性为false

form1.Text = string. Empty;

form1.ControlBox = false;

2.如何使winform的窗体使用XP的风格

见原作

3.如何禁止form在工具栏显示

设置form的ShowInTaskbar属性为false即可

4.如何使程序打开默认的邮件程序并带有一些参数让用户开始写邮件

         1)如果是web程序:

         <a href=”mailto:email@address1.com,email@address2.com?cc=email@address3.com&Subject=Hello&body=Happy New Year”>some text</a>

         2) 对于windows程序,需要使用System.Diagnostics.Process类

Process process = new Process();
process.StartInfo.FileName = "mailto:email@address1.com,email@address2.com?subject=Hello&cc=email@address3.com&bcc=email@address4.com&body=Happy New Year" ;

process.Start();

5.如何创建类似msn提示窗口

需要获得通过Screen.GetWorkingArea(this).Width(Height)属性获得屏幕的大小,然后使用一个timer根据时间改变窗口的位置

五.Button控件

1.如何设置form的默认button(即在form上按下回车时触发的button)

         可以设置form的AcceptButton属性:form1.AcceptButton = button1;

2. 如何设置form的取消button(即在用户按下Esc键时触发的button)

         可以设置form的CancelButton属性:form1.CancelButton = buttonC;

3. 如何通过程序触发一个button的Click事件

         Button1.PerformClick

 

六.Combo Box

1.如何使用可选字体填充Combo Box

comboBox1.Items.AddRange (FontFamily.Families);

 

七.TextBox

1.如何禁用TextBox的默认上下文菜单(右键菜单)

textBox1.ContextMenu = new ContextMenu();

2,3 见原作

4.如何在TextBox获得焦点的时候,将焦点放在textBox文字的最后

textBox1.SelectionStart = textBox1.Text.Length;

posted @ 2007-12-03 01:44 辛迪 阅读(75) 评论(0)  编辑
 

在aspx中定义javascript事件,判断按键是否为上下键;

<script type="text/javascript">
        var currentRowId = 0;
        function SelectRow()
        {
            if (event.keyCode == 40)
                MarkRow(currentRowId+1);
            else if (event.keyCode == 38)
                MarkRow(currentRowId-1);
        }

        function MarkRow(rowId)
        {
            if (document.getElementById(rowId) == null)
                return;

            if (document.getElementById(currentRowId) != null )
                document.getElementById(currentRowId).style.backgroundColor = '#ffffff';

            currentRowId = rowId;
            document.getElementById(rowId).style.backgroundColor = '#ff0000';
        }
    </script>


然后在gridview的rowDataBound中, 添加处理按键的事件处理函数和使用鼠标点击某行时的选中事件.
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Attributes.Add("id", _i.ToString());
        e.Row.Attributes.Add("onKeyDown", "SelectRow();");
        e.Row.Attributes.Add("onClick", "MarkRow(" + _i.ToString() + ");");

        _i++;
    }
}

 
 当点某行时,直接选中,然后移动方向键则切换不同的选中行; 如果直接按方向键,则从第一行开始标识.

 

posted @ 2007-12-03 01:42 辛迪 阅读(208) 评论(0)  编辑
 

在ASP.ET 1.x的时候,很多朋友可能需要进行跨页提交的处理,也就是从页面A能够提交到页面B,甚至不同的Control其目标处理页面也各不相同。尤其是从ASP/JSP/PHP转过来的开发人员,可能更有这种需求。但很不幸,在ASP.NET 1.x的时候,处理这种跨页请求是十分丑陋的,需要非常多的“技巧化”处理。

在ASP.NET 2.0的时候,对于跨页提交已经有了非常合理的解决方案,以下就是一个示例。

SourcePage.aspx: 请注意Button1的PostBackUrl属性设置

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
public string YourName
{
get
{
return this.TextBox1.Text;
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="请输入您的姓名" Width="183px"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server"  Text="提交" PostBackUrl="~/TargetPage.aspx" /></div>
</form>
</body>
</html>

  
TargetPage.aspx:请注意PreviousPageType的属性设置

<%@ Page Language="C#" %>
<%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
this.Label1.Text = PreviousPage.YourName;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" ></asp:Label>
</div>
</form>
</body>
</html>


OK,就通过这么简单的两个属性设置,就可以非常方便的得到跨页提交的特性。

读取源页面的信息

  ASP.NET 2.0中,Button控件有个新增的属性PostBackUrl,用来设置需要提交的目标页面。因为只要指定Button控件的PostBackUrl属性就可以提交到其它页面,我们可以在页面中使用多个控件配置其PostBackUrl的属性,提交到不同的页面。当然也可配置多个页面提交到同一个页面。

  在跨页面提交之后,通常我们需要从源页面中读取控件的信息(即由浏览器发送的信息),以及源页面的公共属性。

读取控件的值

  ASP.NET 2.0的Page类新增了一个PreviousPage属性。顾名思义,目标页面中的这个属性包含对源页面的引用。这样就可以在目标页面中通过PreviousPage属性访问源页面的信息,我们一般使用FindControl方法来查找源页面上的控件并读取这些控件的值。下面的代码说明了该方法的使用:

if (Page.PreviousPage != null)
{
TextBox txtName = (TextBox)Page.PreviousPage.FindControl("txtName");
if (txtName != null)
{
Label1.Text = txtName.Text;
}
}


  当我们想查找源页面中控件属于另一个控件或者是模板之中,就不能直接使用FindControl方法来读取它,而是应该先获取对该容器的引用,然后才能在该容器中查找要获取的控件。下面的例子中,FirstPage.aspx页面中包含一个Panel控件,其ID为MainPanel,它还包含ID为UserName的TextBox控件。具体代码如下:

Panel MainPanel = (Panel)PreviousPage.FindControl("MainPanel");
if (MainPanel != null)
{
TextBox UserName = (TextBox)MainPanel.FindControl("UserName");
if (UserName != null)
{
Label1.Text = UserName.Text;
}
}
else
{
Label1.Text = "Cannot find UserName control.";
}

 


读取源页面的公共属性

  一旦在目标页面中获取了PreviousPage的引用,就能访问源页面中公共控件的属性,同样也可访问源页面中的公共属性。当然,我们需要预先在源页面中公开需要被访问的属性方可在目标页面中访问。

  若要获取源页面的公共成员,必须先获取对源页面的强类型引用。就像第一个例子中,我们可以使用@PreviousPageType指令来指定源页面,它有两个属性分别为:VirtualPath和TypeName。使用VirtualPath属性指定来源页的虚拟路径(包含文件名),也可以使用TypeName指定源页面的属性。注意只能指定其中的一个,两者都指定就会失效。如第一个例子中所示:

<%@ PreviousPageType VirtualPath="~/FirstPage.aspx" %>

 
  如果使用了@PreviousPageType指令,目标页面中的PreviousPage 属性被强类型化为源页面的类。因此,可以直接引用源页面的公共成员。要获取对源页面的强类型引用的另一种方法是在目标页面中包含一个@Reference 指令,就像引用要在页面中使用的其它任何类型一样。在这种情况下,你可以在目标页面中获取目标页面的PreviousPage属性并将其强制转换为源页面的类型,如下面的代码所示:

SourcePage_aspx sourcePage;
sourcePage = (SourcePage_aspx) PreviousPage;
Label1.Text = sourcePage.UserName;

 


读取源页面中的Form信息

  如果源页面和目标页面属于同一个 ASP.NET 应用程序,则目标页中的PreviousPage属性包含对源页面的引用。在没有使用@PreviousPageType指令的情况下,目标页面中PreviousPage 属性类型化为Page。

  注意,如果该页不是跨页发送的目标页面或者目标页面位于不同的应用程序中,则不会初始化PreviousPage属性。

  如果源页面和目标页面属于不同的应用程序,甚至是不同的网站,那就无法直接获取源页面上控件的值,但可以从Request.Form中读取发送的数据。还有一个需要注意的问题,因为源页面的视图状态经过Hash处理,所以不能从源页面中读取视图状态。如果要在源页面中存储值并让这些值可供其他应用程序中的目标页使用,可以将这些值作为字符串存储在源页面的隐藏字段中,并在目标页面中通过 Request.Form 来访问它们。
判断是否为跨页面提交

  跨页面提交的时候,源页面控件的内容被提交到目标页面,然后浏览器执行POST操作(注意,不是GET)。在ASP.NET 1.x中由于页面都是自己提交给自己,可以通过Page的IsPostBack属性来判断是否为页面提交。但是在跨页面提交的时候,目标页面的IsPostBack属性为false。如果要判断是否为跨页面提交,可以对目标页面的PreviousPage属性返回的引用页面的IsCrossPagePostBack属性进行判断,如下面的代码所示:

if (PreviousPage != null)
{
if (PreviousPage.IsCrossPagePostBack == true)
{
Label1.Text = "跨页面提交";
}
}
else
{
Label1.Text = "非跨页面提交";
}

 


  注意,如果当前页面不是跨页面提交的目标页面,则其PreviousPage属性为空。


跨页面提交 VS Server.Transfer

  ASP.NET 2.0中,无论是跨页面提交还是使用Server.Transfer操作,都可以使用Previousoage属性来获取对源页面的引用。如果要区分它们,可以使用上面介绍的方法。

  下面是跨页面提交与Server.Transfer之间的一些区别:

属 性
 跨页面提交
 Server.Transfer
 
IsPostBack
 false
 false
 
PreviousPage
 源页面的引用
 源页面的引用
 
PreviousPage.IsCrossPagePostBack
 true
 false
 
IsCrossPagePostBack
 false
 false
 
IsCallBack
 false
 false
 


  跨页面提交是客户端浏览器的行为,而Server.Transfer则是服务器端的行为。在后面的小节中,我们会分析跨页面提交时客户端浏览器是如何实现提交的。

对跨页面提交的简单分析

  在上面的例子中,我们都提到设置Button的PostBackUrl属性来实现跨页面提交。其实只要实现IButtonControl接口的控件均可以实现这一点。Button, ImageButton, 和 LinkButton都实现了IButtonControl接口。通过实现IButtonControl,自定义控件也可以有表单中的按钮所具有的跨页面提交的功能。IButtonControl接口聚合了ASP.NET 1.x支持的多数按钮控件(包括一些html按钮控件)的一些属性。

读取源页面的信息

  ASP.NET 2.0中,Button控件有个新增的属性PostBackUrl,用来设置需要提交的目标页面。因为只要指定Button控件的PostBackUrl属性就可以提交到其它页面,我们可以在页面中使用多个控件配置其PostBackUrl的属性,提交到不同的页面。当然也可配置多个页面提交到同一个页面。

  在跨页面提交之后,通常我们需要从源页面中读取控件的信息(即由浏览器发送的信息),以及源页面的公共属性。

读取控件的值

  ASP.NET 2.0的Page类新增了一个PreviousPage属性。顾名思义,目标页面中的这个属性包含对源页面的引用。这样就可以在目标页面中通过PreviousPage属性访问源页面的信息,我们一般使用FindControl方法来查找源页面上的控件并读取这些控件的值。下面的代码说明了该方法的使用:

if (Page.PreviousPage != null)
{
TextBox txtName = (TextBox)Page.PreviousPage.FindControl("txtName");
if (txtName != null)
{
Label1.Text = txtName.Text;
}
}

  当我们想查找源页面中控件属于另一个控件或者是模板之中,就不能直接使用FindControl方法来读取它,而是应该先获取对该容器的引用,然后才能在该容器中查找要获取的控件。下面的例子中,FirstPage.aspx页面中包含一个Panel控件,其ID为MainPanel,它还包含ID为UserName的TextBox控件。具体代码如下:

Panel MainPanel = (Panel)PreviousPage.FindControl("MainPanel");
if (MainPanel != null)
{
TextBox UserName = (TextBox)MainPanel.FindControl("UserName");
if (UserName != null)
{
Label1.Text = UserName.Text;
}
}
else
{
Label1.Text = "Cannot find UserName control.";
}

读取源页面的公共属性

  一旦在目标页面中获取了PreviousPage的引用,就能访问源页面中公共控件的属性,同样也可访问源页面中的公共属性。当然,我们需要预先在源页面中公开需要被访问的属性方可在目标页面中访问。

  若要获取源页面的公共成员,必须先获取对源页面的强类型引用。就像第一个例子中,我们可以使用@PreviousPageType指令来指定源页面,它有两个属性分别为:VirtualPath和TypeName。使用VirtualPath属性指定来源页的虚拟路径(包含文件名),也可以使用TypeName指定源页面的属性。注意只能指定其中的一个,两者都指定就会失效。如第一个例子中所示:

<%@ PreviousPageType VirtualPath="~/FirstPage.aspx" %>

  如果使用了@PreviousPageType指令,目标页面中的PreviousPage 属性被强类型化为源页面的类。因此,可以直接引用源页面的公共成员。要获取对源页面的强类型引用的另一种方法是在目标页面中包含一个@Reference 指令,就像引用要在页面中使用的其它任何类型一样。在这种情况下,你可以在目标页面中获取目标页面的PreviousPage属性并将其强制转换为源页面的类型,如下面的代码所示:

SourcePage_aspx sourcePage;
sourcePage = (SourcePage_aspx) PreviousPage;
Label1.Text = sourcePage.UserName;

读取源页面中的Form信息

  如果源页面和目标页面属于同一个 ASP.NET 应用程序,则目标页中的PreviousPage属性包含对源页面的引用。在没有使用@PreviousPageType指令的情况下,目标页面中PreviousPage 属性类型化为Page。

  注意,如果该页不是跨页发送的目标页面或者目标页面位于不同的应用程序中,则不会初始化PreviousPage属性。

  如果源页面和目标页面属于不同的应用程序,甚至是不同的网站,那就无法直接获取源页面上控件的值,但可以从Request.Form中读取发送的数据。还有一个需要注意的问题,因为源页面的视图状态经过Hash处理,所以不能从源页面中读取视图状态。如果要在源页面中存储值并让这些值可供其他应用程序中的目标页使用,可以将这些值作为字符串存储在源页面的隐藏字段中,并在目标页面中通过 Request.Form 来访问它们。

posted @ 2007-12-03 01:40 辛迪 阅读(131) 评论(0)  编辑
CALENDER
<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

公告

昵称:辛迪
园龄:4年4个月
粉丝:1
关注:0

搜索

 
 

常用链接

最新随笔

随笔分类

随笔档案

文章分类

文章档案

开发工具

网上书店

下载基地

学习资源

娱乐江湖

自家兄弟

积分与排名

  • 积分 - 24714
  • 排名 - 4267

阅读排行榜

评论排行榜

推荐排行榜


Powered By: 博客园
模板提供沪江博客