(收集贴)的一些asp.net小技巧

由于最近开始学写些asp.net程序,所以对于一小技巧不是很熟悉,因此不断的从网络上四处收来,自己做个备忘,也许有的朋友也能用得着。

1。不让GridView的表头显示。(来源yanli0823的博客)

       直接使用showHeader =false这个属性竟然不起任何作用,表头该有还是有,试了试在后台.cs代码文件中用gridview1.ShowHeader = false,这种方式也不可以;

       然后使用css样式,在headerstyle中引用样式,display:none,这样达到了我要的效果。代码:

<headerStyle  cssclass="gvHideHeader"/>

css样式文件中

.gvHideHeader

{

    display:none;

}

2.GridView的HyperLinkField,并让此超链接带参数。(来源MSDN)

 

<asp:boundfield datafield="OrderID"
            headertext="Order ID"/>
<asp:boundfield datafield="ProductID"
            headertext="Product ID"/>
<asp:hyperlinkfield datatextfield="UnitPrice"
            datatextformatstring="{0:c}"
            datanavigateurlfields="ProductID"
            datanavigateurlformatstring="~\details.aspx?ProductID={0}"          
            headertext="Price"
            target="_blank" />
<asp:boundfield datafield="Quantity"

            headertext="Quantity"/>

3。后台获取 GridView 行数据的常见两种方式

1).在后台RowCommand 事件中先取得行号,再根据行号去访问各列的值

在WebControl中,不像WinForm那样,可以那么容易的取得行号的

因为Web提交的过程中,Grid都不存在了,对于服务器上执行的后台代码当然找不着所谓的e.RowIndex什么的了

用GridView默认的ButtonField  我找了很多资料,也不知道应该如何取得行号,好像说要在行绑定过程中将行号绑定到

它的CommandArguments中,可以在2.0中,我就没发现ButtonField有什么CommandArguments

所以只有用模板列了,用他的例子如下:

aspx中GridView里如下:

  <asp:TemplateField HeaderText="取消发货" >
                        <ItemTemplate> 
                        <asp:Button runat="server" Text="取消" CommandName="CancelSend" />          
                        </ItemTemplate>
 </asp:TemplateField>

不用任何绑定,在后台如下读取行号

C#:

   if (e.CommandName == "CancelSend")
            {
                GridViewRow drv = ((GridViewRow)(((Button)(e.CommandSource)).Parent.Parent));

//CommandSource 引起事件的命令源
                int RowIndex = drv.RowIndex;               
            }

做到这里就觉得奇怪,为什么用Grid本身的ButtonField不能转化

用ButtonField读的时候,CommandSource 为GridView本身,真是奇怪。这样一来不知道那ButtonField有什么用。

 

还有另一种在命令参数中绑定的方法,可以实现,但感觉没这种方式直接,此处不介绍。

 

2).通过CommandArgument参数进行传递,具体法如下:

  在页面代码中,CommandArgument='<%#Eval("ID")+","+Eval("Name")+","+Eval("Age")%>'

后台取值方法如下: object[] arguments = e.CommandArgument.ToString().Split(',');

 操作很简单,现在说一下我理解的原理。

 CommandArgument是一个object类型的属性,要传多个参数只能靠字符串拼接然后在后台拆分。

还好,asp.net Eval方法很容易完成这样的功能,在CommandArgument='<%#Eval("ID")+","+Eval("Name")+","+Eval("Age")%>'中

执行过程如下,先分别对Eval进行绑定,然后把<%# %>里的东西ToString一下,再封装成object进行递。

不信你可以试试用这种方式CommandArgument='<%#Eval("ID"),Eval("Name"),Eval("Age")%>'

执行时就会报错“ToString”方法没有采用“4”个参数的重载,为什么了?

按上面的原理,假如id=1,name=kuitar,age=24. 则后一种方式<%# %>里的内容为"1","kuitar","25"
现在ToString("1","kuitar","25",''可能还有个另外的参数,呵呵'),显然会出错。

而用第一种方式则不一样,绑定后<%# %>里的内容为"1,kuitar,25",因为+号起了作用。这时候ToString应该没有问题了。

 

 4.GridView中HyperLinkField传递两个以上参数( 闹市静屋, 木子屋

1).在项目中,采用数据控件的时候,我们有时要传递多个参数,不一定是数据表中的字段,也可能是页面中的值.虽然要实现有很多种方法,我这里给出一种 我在项目中使用的方法,方法很简单。
我是通过HyperLinkField,然后在绑定数据控件之前将HyperLinkFieldDataNavigateUrlFormatString属性赋上URL,具体写法如下:
((HyperLinkField)GridView1.Columns[i]).DataNavigateUrlFormatString="...?id={}&str="+str.
i为HyperLinkField在GridView1中的序号,str为变量。

该代码一定要在GridView1绑定方法之前。

2).很多时候一个链接通常带有好几个参数,形如:http://www.mzwu.com/article.asp?u_id=1&id=1197, 怎么让HyperLinkField的链接也带多个参数呢?很简单,只须在其DataNavigateUrlFields属性中设置多个字段(用逗号分 隔),然后在属性DataNavigateUrlFormatString中使用{0}、{1}、{2}等来表示字段值即可。

 

5.如何为GridView添加一个复选框,实现效果:点击header上的复选框实现所有按钮的全部选中或全部不选中。

1)、 首先在GridView中添加一个绑定列。什么也不写预览后的的效果如下

 GridView超链接列的使用||在GridView中如何添加CheckBox和如何实现CheckBox的全选

如何为数据项添加CheckBox:写到后台代码的RowDataBound事件中:
GridView超链接列的使用||在GridView中如何添加CheckBox和如何实现CheckBox的全选
事件代码:
GridView超链接列的使用||在GridView中如何添加CheckBox和如何实现CheckBox的全选
为项添加CheckBox后在浏览器查看效果图:

GridView超链接列的使用||在GridView中如何添加CheckBox和如何实现CheckBox的全选

为Header添加CheckBox,代码也是写在RowDataBound()事件中实现代码为本图片的最后一个方法,判断Header,只需要进行一层if判断即可:

GridView超链接列的使用||在GridView中如何添加CheckBox和如何实现CheckBox的全选

在浏览器中浏览效果如下:

GridView超链接列的使用||在GridView中如何添加CheckBox和如何实现CheckBox的全选

2、  RowDataBound事件中写代码,我们一定要知道GridView的结构,GridView本身是一个非常大的对象了,里面每一行Row是一个对象,行中每一个Cell格也是一个对象。

格中的内容分为两种情况:一种是绑定显示的文字,一种是控件,例如超链接按钮,CheckBox等等,如何在RowDataBound中找到这些对象:e.Row.Cells[].FindControl(0),里面放一个控件的索引号。

如果想要实现CheckBox的全选,JavaScript是必不可少的,这里我们可以单独创建一个JS文件,然后把需要写的JavaScript代码放到这个文件中,然后把这个JS文件导入到我们的网页当中即可,代码如下:

GridView超链接列的使用||在GridView中如何添加CheckBox和如何实现CheckBox的全选

这样就实现了全选的效果了:

GridView超链接列的使用||在GridView中如何添加CheckBox和如何实现CheckBox的全选

 

 

 


posted @ 2009-07-12 15:40  编程夜猫  阅读(803)  评论(2编辑  收藏  举报