本文介绍了在DataGrid中实现超链接的三种方法,有需要的朋友可以参考一下。
1.使用DataGrid中的超链接列—HyperLinkColumn
相信很多人都用过datagrid中的超链接列,而且效果很好。默认情况下,只能传递一个参数,如下所示:
复制代码如下:ASP:超链接列datatextfield=公司名称 datanavigateurlfield= customerid datanavigateurlformat string= default 2 . aspx?customerid={ 0 } eader text= link /ASP:hyperlink column从上面可以看出,传递一个参数的超链接是很容易的。那么如果传递多个参数该怎么办呢?
2.在DataGrid的ItemDataBound事件中对超链接列赋值
假设有一个id为DataGrid1的Datagrid,第一列是一个超链接列(下标0),那么它的ItemDataBound事件可以写成下面的形式。
复制代码如下:private void datagrid 1 _ itemdatabound(对象发送方,系统。web . ui . web controls . datagriditemeventargs e){ if(e . item . item type==listitem type。pager | | e . item . item type==listitem type。header | | e . item . item type==listitem type。页脚){ return//确定是页眉还是页脚} else { hyperlink link=(hyperlink)e . item . cells[0]。控件[0];//也可以使用FindControlLink。Navigateurl= webform3.aspx?id=XXX name=XXX ;//如果与列相关,可以写成//link . navigateurl= web form 3 . aspx?id=" e . item . cells[列号]。文本;}}
如果要在模板列中使用超链接,可以将该列中的模板设置为LinkButton。您可以同时拥有多个linkbuttons,但id不能相同。我们仍然假设该列位是第一列。这时,为其中一个LinkButton定义一个链接可以如下:语句
复制代码如下:hyperlink link=(hyperlink)e . item . cells[0]。控件[0];用…替换
复制代码如下:link button link=(link button)e . item . cells[0]。FindControl(" link button id ");链接。attributes[ onclick ]= script location . href= XXX . aspx ;/script ;
当该列只有一个控件,即LinkButton时,可以通过下面的语句实现:
复制代码如下:e.item.cells [0]。attributes[ onclick ]= script location . href= XXX . aspx ;/script ;
这样可以节省查找控件的时间。
其实上面我们已经提到了两种方法,一种是使用HyperLinkColumn在ItemDataBound事件中添加NavigateUrl,另一种是在ItemDataBound事件中使用javascript定义click事件。后者更灵活,只要控件有click事件。
3.使用HTML超链接标记
复制代码如下:ASP: template列项模板a href= default.aspx?id= % #(string)databinder . eval(container . dataitem, customerid )% name= % #(string)databinder . eval(container . dataitem, company name )% action/a/item template/ASP:template column
它的作用是点击时转到Default.aspx,同时传递参数id和名称,其中两个参数都是通过数据绑定动态生成的。此方法在VS2005中成功,但在VS2003中报告了一个错误。
还有一个巧妙的方法,也实现了第三种方法的功能:假设第二列作为超链接,aspx页面代码:
复制代码如下:ASP:boundcolumn data field= id visible=false/ASP:BoundcolumnData field= name /ASP:BoundcolumnData field//第二列
ItemDataBound事件如下:
复制代码如下:public void datagrid 1 _ item databound(object sender,DataGridItemEventArgs e){ if(e . item . item type==listitem type。pager | | e . item . item type==listitem type。header | | e . item . item type==listitem type。页脚){ return//确定是页眉还是页脚} else {e.item.cells [1]。text= a href=news.aspx?ID= e.Item.Cells[0]。Text e.Item.Cells[1]。文本“/a”;//这个可以改成你需要的;} }