chao 的个人资料清凉水都照片日志列表更多 工具 帮助

日志


9月17日

得GridView的EmptyDataTemplate中的控件 - kingwkb的专栏 - CSDNBlog

 

转载 得GridView的EmptyDataTemplate中的控件收藏

新一篇: Visual studio 2005中Source View中不能切换到Design View的解决方法 | 旧一篇: 关于进行Asp.net窗体验证的过程说明
这个问题的提出,是我想在Gridview中整理添加记录的功能。
如果有数据的时候,我们可以把空的newTextBox放在FooterTemplate中,在程序里可以用
Gridview1.FooterRow.FindControl("newTextBox")来取得这个控件,完成添加记录的功能。
但如果数据表中没有记录,header和footer都不会显示出来。 这时,只会显示EmptyDataTemplate里的内容。
奇怪的是EmptyDataRow并不是Gridview的成员,于是上面的方法不行了。
找了很久,找到这样一个变通的办法来获得EmptyDataTemplate里的控件:

Dim txbNew As TextBox = GridView1.Controls(0).Controls(0).FindControl("newTextBox")

很变态,但确实可行。

1 Protected Sub btnAddNew_Click()Sub btnAddNew_Click(ByVal sender As Object, ByVal e As System.EventArgs)
2        Label1.Text = TypeName(GridView1.Controls(0)).ToString + " "
3 Dim EmptyChildTable As Table = GridView1.Controls(0)
4 Dim EmptyGridView As GridViewRow = EmptyChildTable.Rows(0)
5        Label1.Text = Label1.Text + EmptyGridView.RowType.ToString + " "
6 Dim txbNewCltName As TextBox = EmptyGridView.FindControl("txbNewCltName")
7        Label1.Text = Label1.Text + txbNewCltName.Text
8 End Sub

其中的txbNewCltName和btnAddNew都是放在EmptyTemplate里的控件。
显示的结果是:
ChildTable EmptyDataRow 新添加的内容

可以知道,第一层Control是Table,第二层Control是Row.

得GridView的EmptyDataTemplate中的控件 - kingwkb的专栏 - CSDNBlog

9月22日

ASP.NET页面间传递参数的方法

del.icio.us 标记: ,

  好久没编程序了,看见许多人在网上找页面间传参的方式,就简单的写点,也算留个备份。

  主要来将有两种:Get与Post,至于两者的区别,还是自己找相关的资料吧,多的很,这里具体讲下操作。在ASP.Net中,获取参数一般都是在Page_Load的时候,当然你也可以在其他的地方调用,看情况而定。先拿Get来说,传入的URL是

~\food_info.aspx?food_id={0}

那么对应的接受方法为

Request.QueryString.GetValues("food_id").GetValue(0)

  剩下的工作就是对接受的数据进行转换了,如果你有好几个food_id的值的话,更改GetValue中的数字就可以了。

  不过这种参数传递安全性是个问题,毕竟参数公开了,即使加密也不安全。所以就要利用到Post的方法,在发送页面中可以用Form的Action属性设置传入页面,也可用每个控件的PostBackUrl来配置,发送后,就是接受了,这个要实现的判断一下,下面结合代码说明。

if (Page.PreviousPage != null)
        {
            Response.Write(Page.PreviousPage.Form.Method.ToString()+"<br/>");
            Label lab2 = (Label)Page.PreviousPage.FindControl("lab1");
            Response.Write(lab2.Text.ToString());
        }

  首先判断一下是否有传入页面,判断Page.PreviousPage是否为空,不为空在做相应的事情,聪明的你应该想到了,如果判断一下是来自哪个页面的不更好,的确,可以实现一些更复杂的功能,不过也相应的加大了服务器的负担,要根据实际的业务流程来看。下面就是两种获取方法了,可以从Form中获取,也可以直接获取控件的名称,注意这里要类型转换,所以要记住类型。如果是纯控件设计,就直接找控件好了,如果不行就用Form的方法了,根据个人喜好了。

  好了就简单的介绍了一下,如果还有什么问题,留言给我,大家讨论才有趣嘛!!!

7月1日

使用ASP.NET AJAX JavaScript Class Browser查看客户端类型

本文来自《ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关》的附录A。


ASP.NET AJAX提供了丰富的客户端JavaScript类型,不过其文档尚不够完善,未能覆盖到类库中所有的类型。幸运的是,Eilon Lipton给我们带来了一个非常好用的工具——ASP.NET AJAX JavaScript Class Browser,用来辅助查看ASP.NET AJAX各个客户端类型的属性、方法和事件。

该ASP.NET AJAX JavaScript Class Browser可以在Eilon Lipton的Blog(http://weblogs.asp.net/leftslipper/)中下载,其本身就是一个用ASP.NET AJAX编写的Web站点。

首先将下载的压缩包解压至某一目录中。为了可以查看到ASP.NET AJAX Futures CTP脚本中所包含的类型,我们随后要将Microsoft.Web.Preview.dll,即ASP.NET AJAX Futures CTP的程序集拷贝到该Web站点的bin\目录中。

打开该Web站点中的ClassBrowser.master文件,在其ScriptManager中添加相应的ASP.NET AJAX Futures CTP中各个脚本的引用。如下粗体部分所示:

<asp:ScriptManager runat="server" ID="ScriptManager1" EnablePartialRendering="false">
    <Scripts>
        <asp:ScriptReference Name="MicrosoftAjaxWebForms.js" />
        <asp:ScriptReference Name="MicrosoftAjaxTimer.js" />
 
        <asp:ScriptReference Name="PreviewScript.js" 
            Assembly="Microsoft.Web.Preview" />
        <asp:ScriptReference Name="PreviewGlitz.js" 
            Assembly="Microsoft.Web.Preview" />
        <asp:ScriptReference Name="PreviewDragDrop.js" 
            Assembly="Microsoft.Web.Preview" />
        <asp:ScriptReference Name="PreviewWebParts.js" 
            Assembly="Microsoft.Web.Preview" />
 
        <asp:ScriptReference 
            Path="ScriptLibrary/AjaxClassBrowser.Reflection.js" />
        <asp:ScriptReference 
            Path="ScriptLibrary/AjaxClassBrowser.ClassWriter.js" />
    </Scripts>
</asp:ScriptManager>

这样即完成了ASP.NET AJAX JavaScript Class Browser的配置。运行该Web站点,可以看到页面左边的导航树按照命名空间对客户端类型进行了归类。展开某个命名空间并选择其中的某个类型,页面右侧将以类似C#语法的方式显示出该客户端类型的原型声明,包括类型的继承关系、实现接口及其属性、方法和事件等。如图A-1所示。

图A-1 ASP.NET AJAX JavaScript Class Browser的界面

如果需要的话,我们也可以将自定义的ASP.NET AJAX客户端类型添加到ClassBrowser.master文件的ScriptManager中。随后即可在ASP.NET AJAX JavaScript Class Browser界面中浏览该自定义类型——和ASP.NET AJAX内建的客户端类型没什么区别。

本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利
This posting is provided "AS IS" with no warranties, and confers no rights.
posted on 2007-06-27 09:13 Dflying Chen 阅读(397) 评论(8)  编辑 收藏 引用 网摘 所属分类: ASP.NET AJAX (Atlas)
3月15日

Xml编程要注意的地方

      最近使用了不少Xml的程序设计,其中的莫名的错误真是多,MSDN上的信息也不能保证完全正确。经过一个晚上的尝试,发现了一个规律,那就大小写的问题,比如Remoting里的设置信道要用到Uri,中文MSDN中写的是Url,英文的没错;书上写的是URI,大小写错了也无法通过,看来还真是有不少人犯这个种低级错误。特别是有的书中把Debug写为debug,连调试都取消了,更没的改正了。
     所以,以后遇到上面的错误,先看看MSDN,中英文都要看,再试试改大小写,一般都是单词的首字幕加大。例如:WorldWorld。还有就是问问高人了,感觉就这些办法了。
11月6日

Report子表与钻取开发注意

最近使用Report的子表功能,可一直无法显示,看完MSDN再到网上下代码,还是改不过来,后来经尝试(总时间累计10小时)终于发现问题得以解决,希望能为和我有同样问题的朋友帮上点忙
 
 
设定好参数后,要对ReportViewer的本地报表变化进行事件订阅(LocalReport.SubProccesing)
this.rptMain.LocalReport.SubreportProcessing += new Microsoft.Reporting.WinForms.SubreportProcessingEventHandler(SubReportProcessingEventHandler);
private void SubReportProcessingEventHandler(object sender, Microsoft.Reporting.WinForms.SubreportProcessingEventArgs e)
        {
            e.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataOrder_订单明细", this.dsOrders.Tables["OrderDetails"]));
           
        }
注意ReportDataSource( string SourceName,object DataSource.Value)中的“SourceName”要与报表文件.rdlc中的数据集绑定的名称相同,否则是新建一个表与先前的数据相关项无关,换句话说就是你新建了一个Table,所以这里要传入你想填充的数据就要写对名称,如果不知道可在报表设计模式下的“报表”菜单下的数据源中查看表名称,使惯了平时的ADO.NET的要注意了,你可能就犯了这个错误,这次不会智能的给你实例表格的,别忘了你加了new关键字,所以以后大家看家new就要注意名称了。
否则,将会出示子表无法显示的问题,其原因就是数据表没有实例化,不过这里不会显示这个错误信息,而是“错误:子表不能正确显示”,大家就要注意了,看看是否是这个原因。
最后要说的是,报表的相关设置都在“报表”菜单中,自己看就行了。
还有报表中的语言是VB语言,有时间也学学吧,反正其他的水晶报表也用的上,钻取就Drillthrough
 void DemoDrillthroughEventHandler(object sender, DrillthroughEventArgs e)
        {
            LocalReport localReport = (LocalReport)e.Report;
            localReport.DataSources.Add(new ReportDataSource("Employees",
                LoadEmployeesData()));
        }