C#如何事件中获得GridView里面TextBox的值

如果是模板列,代码如下:

string n = ((TextBox)(this.GridView1.Rows[行号].Cells[1].FindControl("TextBox1"))).Text.Trim();

如果是非模板列,代码如下:

string n = this.GridView1.Rows[行号].Cells[1].Text.Trim();

如何获得行号:

e.RowIndex

VB.Net在WebBrowser使用CookieContainer中的cookies的方法

Private Class CookieAwareWebClient
	Inherits WebClient
	Public Sub New()
		CookieContainer = New CookieContainer()
	End Sub
	Public Property CookieContainer() As CookieContainer
		Get
			Return m_CookieContainer
		End Get
		Private Set
			m_CookieContainer = Value
		End Set
	End Property
	Private m_CookieContainer As CookieContainer
	Protected Overrides Function GetWebRequest(address As Uri) As WebRequest
		Dim request = MyBase.GetWebRequest(address)
		Dim httpRequest = TryCast(request, HttpWebRequest)
		If httpRequest IsNot Nothing Then
			httpRequest.CookieContainer = CookieContainer
		End If
		Return request
	End Function
End Class
Private Sub Form1_Load(sender As Object, e As EventArgs)
	Using client = New CookieAwareWebClient()
		client.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials
		client.DownloadData("http://blog.lishewen.com")
		Dim cookies = client.CookieContainer.GetCookies(New Uri("http://blog.lishewen.com"))
		Dim prefCookie = cookies("PREF")
		webBrowser1.Navigate("http://blog.lishewen.com", "", Nothing, ("Cookie: " & Convert.ToString(prefCookie.Value)) + Environment.NewLine)
	End Using
End Sub

string.Format的大括号转义

用string.format时,如果里面有大括号"{" or "}",就用两个大括号"{{" or "}}" 替换,比如
string.Format("黎摄文{{lishewen}},{0}lishewen.com", "算神")

VB.Net让random在极短时间内产生的随机数不相同

由于

Dim r As new Random()

的种子没有指定,生成的时间间隔太短导致生成结果一样

及时指定为

Dim rd As new Random(Now.Millisecond)

在运行速度快没有费时操作的情况下(如:并行计算)仍然得倒相同结果.

用:Dim rd As new Random(Guid.NewGuid.GetHashCode)

可以解决此问题

Reflector反编译.NET文件后修复

反编译后的工程文件用VS2010打开后,在打开窗体时会出现一系列错误提示:

第一种情况:

“设计器无法处理第 152 行的代码: base.AutoScaleMode = AutoScaleMode.Font; 方法“InitializeComponent”内的代码由设计器生成,不应手动修改。请移除任何更改,然后尝试重新打开设计器”。

解决方法就是:对所有System.Windows.Forms.命名空间里面的控件需要全命名空间的声明,例如里面上图的base.AutoScaleMode = AutoScaleMode.Font;就要改成base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
第二种情况:

“变量“manager”未声明或从未赋值。 ”

解决方法就是:本方法只限于在InitializeComponent中包含System.Resources.ResourceManager调用的窗体

1.资源文件格式转换,将.resources(二进制)文件转成.resx文件(XML)  用C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin下 resgen.exe  格式: resgen *.resources *.resx(.resx文件最好与窗体.cs文件同名)

2.将InitializeComponent方法中的对象manager替换为resources(没错,只替换变量名^_^,全部都换掉哦,最好的办法就是更改manager的申明)

3.将资源文件.resx放到窗体文件.cs相同的文件夹下。

4.将所有窗体(.cs)从工程中排除,再添加(这样可以省去将.resx文件映射到.csproj的过程)。

微软推新工具助开发者将iPhone应用转至WP7

据国外媒体报道,微软今天通过Windows Phone Developer Blog宣布,公司已经发布新款工具,以帮助开发者将iPhone应用转移至Windows Phone 7平台。微软同时提醒开发者“市场上并没有替你工作的神奇魔法棒”,新款iPhone/iOS to Windows Phone 7 API绘制工具,将使这一过程更加简单。

用户可以登录http://windowsphone.interoperabilitybridges.com,对该款API绘制工具进行了解,微软还提供了90页的“就Windows Phone 7平台,致iPhone应用开发者的指南”(Windows Phone 7 Guide for iPhone Applications Developers)。网站还配有开发者故事(developer stories)视频,及开发者开始开发时所需其他资料的汇编。

微软指出,具体而言,API绘制工具的功能有点类似于字典,允许用户挑选出自己的iOS API call,然后在Windows Phone 7平台查找相同分类、方法和事情通知。开发者可以搜索指定的iOS API call,并通过C#示例代码和针对两个平台的API文件,在Windows Phone 7平台寻找相同类别。

开始时,iOS APIs有三个分类可以通过该工具进行绘制:网络(Network/Internet)、用户界面(User Interface)以及数据管理(Data Management)。因为平台不同,以及拥有不同的UIs,因此并非全部的APIs均可以绘制。微软表示,将有更多的APIs可通过该工具进行绘制。

算神模板引擎基本使用方法

最近一连有3家网站定制了算神邮件群发器,上面有个”使用算神模板引擎“选项令有些人疑惑,下面就简单介绍一下用法

群发器上面绑定的算神模板引擎是单实例的简化版,只有一个占位符语法:{数据库字段名}

举个例子:

例如下面一个用户数据表

 id name sex ip email
 1 算神 先生 127.0.0.1 a@a.com

然后我们在发送窗体内填入

主题:{name}你好

内容:尊敬的会员 {name} {sex} 你好,你最后一次登陆的ip为:{ip},如需修改密码请到http://www.xxx.com/userinfo-{id}.html

这时收到的邮件就会是这样

主题:算神你好

内容:尊敬的会员 算神 先生 你好,你最后一次登陆的ip为:127.0.0.1,如需修改密码请到http://www.xxx.com/userinfo-1.html

另:此方法同样适用于装配了算神模板引擎的算神短信群发器

怎样防止从Cache中读取WML页面

当WML页面下载到WAP设备后,它将保存在WAP设备内存中一段时间,直到这个时间过期。在这之后,页面将从服务器下载,而不是从WAP设备的缓存读取。这个过程被称做Cache。
但是有些时候不想让页面从缓存中读取,而是从服务器端读取。一个典型的例子就是当服务器的内容不断在更新的时候,通过在HTTP头中加入一定的cache信息,来告诉WAP设备该页面将不存储在缓存中。
可以在服务器端生成HTTP头,或者使用PHP、ASP、Perl或者其他服务端开发语言。这一行不能被包括在页面里,既然是HTTP的信息头,就不是WML元素。
对于静态页面,或许没有使用服务器端脚本语言,许多浏览器支持META标签来控制浏览器的Cache。看本部分的最后的例子。
将下面代码加入到HTTP头中,页面将马上过期:
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: DD. month YYYY HH:MM:SS GMT
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
第一行告诉微型浏览器,页面已经过期一段时间了。第二行告诉浏览器页面最后一次修改的时间。DD应该换成当天的日期,month YY HH MM SS等等类推。第三行和第四行有同样的效果。告诉浏览器页面不被Cache(第三行适用于 HTTP 1.1,第四行适用于HTTP 1.0)。
下面的是PHP的一个例子:
<?
// set the correct MIME type
     header("Content-type: text/vnd.wap.wml");
// expires in the past
     header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// Last modified, right now
     header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
// Prevent caching, HTTP/1.1
     header("Cache-Control: no-cache, must-revalidate");
// Prevent caching, HTTP/1.0
     header("Pragma: no-cache");
   ?>
下面是使用WebClasses(VB)的例子。使用"Response.Expires=-1",防止Cache。
 Private Sub WebClass_Start()
      'Set correct MIME type
      Response.ContentType = "text/vnd.wap.wml"

      'Make sure no caching
      Response.Expires = -1
      Response.AddHeader "Pragma", "no-cache"
      Response.AddHeader "Cache-Control", "no-cache, must-revalidate"

      'Use basicwml(my own) as template
      Set NextItem = basicwml
  End Sub 
这里有一个ASP的例子,同样使用“Response.Expires=-1”防止Cache。
<%
    Response.ContentType = "text/vnd.wap.wml"
    Response.Expires = -1
    Response.AddHeader "Pragma", "no-cache"
    Response.AddHeader "Cache-Control", "no-cache, must-revalidate"
%> 
最后是使用META的例子:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
  <wml>
    <head>
      <meta forua="true" http-equiv="Cache-Control" content="max-age=0"/>
    </head>
    <card id="alwaysexpire">
      <p>This deck will never be stored in the cache</p>
    </card>
  </wml>
下面的页面是在经过86400秒(24 hours)后过期。
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
  <wml>
    <head>
      <meta forua="true" http-equiv="Cache-Control" content="max-age=86400"/>
    </head>
    <card id="expire1day">
      <p>This card will live in the cache for a day</p>
    </card>
  </wml>
有些浏览器例如:UP.Simulator如果可以通过“返回”达到另外一个卡片,那么它将不会重新装载卡片。为了强制这个更新动作,用户必须在META标签中使用must-revalidate 参数。
<meta forua="true" http-equiv="Cache-Control" content="must-revalidate"/>

手机网页的制作方法八——WML任务动作

九、任务动作

在前面介绍WML语言的链接标签<anchor>时层提到过<go> <prev>和<refresh>几个任务,它们都是WML中的典型任务动作。本文就对它们进行简单介绍。任务 (task) 定义了事件发生时所执行的动作,比如在输入一个卡片或选择一个链接之类的时间发生时。分别有:Go任务 、Prev 任务、Refresh 任务、Noop 任务。它们各自的含义如下:
<go>表示切换到新卡片的动作。
<noop>规定不做任何事情。用于覆盖卡片组级别的元素。
<prev>表示后退到前面的卡片的动作。
<refresh>刷新一些指定的卡片变量。如果有变量显示在屏幕上,此任务也刷新屏幕。
使用方法:
<?xml version="1.0"?>
 <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
 <wml>
 <card>
 <p>
 <anchor>
 跳转到测试页面
 <go href="test.wml"/>
 </anchor>
 </p>
 <p>
 <anchor>
 返回前页
 <prev/>
 </anchor>
 </p>
 <p>
 <anchor>
 刷新本页
 <go href="thispage.wml"/>
 <refresh>
 <setvar name="x" value="30"/>
 </refresh>
 </anchor>
 </p>
 <p>
 <do name="back" type="prev" label="Back">
 <noop/></do>
 </p>
 </card>
 </wml>
上面的例子使用 <anchor> 标签向卡片添加了一个 "刷新本页" 链接。当用户点击该链接时,它会刷新页面,同时变量 x 的值将被设置为30。上面的例子使用 <do> 标签向卡片添加一个 "Back" 链接。当用户点击这个 "Back" 链接时,他被带回前面的卡片。但是 <noop> 标签阻止了这个操作;当用户点击 "Back" 时,不会发生任何事情。

十、计时器

除了上面所讲的任务动作等,WML中还有一个特色标签timer计时器。利用它可以制作倒数计时器,时间单位是一秒的十分之一。下面的例子将用5秒来显示一条消息,然后切换到文件 "test.wml":
<?xml version="1.0"?>
 <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
 <wml>
 <card ontimer="test.wml">
 <timer value="50"/>
 <p>提示文字</p>
 </card>
 </wml>
到这里,WML的基本语法已经介绍的差不多了,再往下就是WML中的变量内容,一般网页制作者用得不多,所以暂且不做介绍了,感兴趣的朋友可以自己查阅相关资料。