返回首页
当前位置: 主页 > 网络编程 > Android教程 >

Gridview-HyperLinkField 相关

时间:2012-10-16 20:09来源:betway必威官网www.etsupport.net 编辑:麦田守望者

一、关于Gridview中HyperLinkField 单击打开时的传值方法

参考 1

<asp:TemplateField HeaderText="资源名称" SortExpression="ResourceName">
<ItemTemplate>
<asp:HyperLink ID="HL_ResourceName" runat="server" NavigateUrl='<%# eval_r("ResourceID", "ResourceInfor.aspx?ResourceID={0}")+"&UploadUser="+DataBinder.eval_r(Container.DataItem,"UserName") %>'
Text='<%# eval_r("ResourceName") %>'></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>

参考2

<asp:HyperLinkField DataTextField ="Dep_Name" HeaderText="部門" DataNavigateUrlFields="Dep_Name" DataNavigateUrlFormatString="ViewDep_Employee.aspx?Dep_Name={0}" Target=_self>
<ItemStyle Width="100px" />
</asp:HyperLinkField>

参考3

<asp:TemplateField HeaderText="員工編號">
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%#"ManageCheckEdit_2.aspx?Emp_workID2="+eval_r("Emp_workID") %> '
Text='<%# eval_r("Emp_workID") %>'>
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>

 


二、gridview的hyperlinkfield属性传递的参数值不全

gridview的hyperlinkfield属性传递的参数值不全

如果仅仅要传数字,那么用HyperLinkField确实很方便,但是遇到中文或者某些特殊字符时,就会有问题,解决的方法有两种,一种是在

web.config里设置:
<!-- 全球化
此节设置应用程序的全球化设置。
-->
<globalization
requestEncoding= "GB2313 "
responseEncoding= "GB2313 "
/>

</system.web>
但我并不推荐这种方法,更好的方法是进行编码转换,转换的方法是Server.UrlEncdo和Server.UrlDecode,应用到GridView绑定的方法是:
<asp:TemplateColumn>
<HeaderTemplate>
姓名
</HeaderTemplate>
<ItemTemplate>
<A href= 'workerxinxi.aspx?bhao= <%# Server.UrlEncode(DataBinder.eval_r(Container.DataItem, "bianhao ").ToString()) %>

&amp;suozdw= <%# Server.UrlEncode(DataBinder.eval_r(Container.DataItem, "szdw ").ToString()) %> &amp;name= <%#

Server.UrlEncode(DataBinder.eval_r(Container.DataItem, "username ").ToString()) %> '>
<%# DataBinder.eval_r(Container.DataItem, "username ") %>
</A>
</ItemTemplate>
</asp:TemplateColumn>

然后,在workerxinxi.aspx里接受的时候需要解码:
string bhao = Server.UrlDecode(Request.QueryString[ "bhao "]);
string suozdw = Server.UrlDecode(Request.QueryString[ "suozdw "]);
string name = Server.UrlDecode(Request.QueryString[ "name "]);

 


三、关于 GridView,HyperLinkField,UrlEncode 中文乱码

简单的描述一下这个有点挠头的问题,就是对于 GridView 中的 HyperLinkField 列,MS 并没有像 BoundField 那样提供 UrlEncode/HtmlEncode 之类相关的属性设置。可实际运用中,你很可能碰到需要在 URL 中传中文参数的问题。Google 出来的网页表明,西方人也会因为一些特殊字符(比如 &)碰到同样的问题。当然相比西方人,CJK 圈子里更普遍一些。

目前看到的文章给出的方案大都是将 HyperLinkField 转化为 TemplateField 之后,手动用 HttpUtility.UrlEncode 方法处理数据绑定。代码会增多,看起来也不太雅观。而且如果你反悔或者想调整字段时,从 TemplateField 也不能自动转回 HyperLinkField。

Google 出来的网页中,有一些网友跟我同样的想法,希望 MS 能够在 .net 2.0 下个版本(也就是 .net 3.x)中提供一个这样的常用属性,并且已经有人向 MS 提交了“bug 报告”。MS 的答复应该令不少人失望:为了在版本升级中保持 backward-compatibility,MS 不会添加这样的属性。

(顺便多句嘴,backward-compatibility 这个词,国内有人译作“向前兼容”,也有人译作“向后兼容”,呵呵,很有意思的一件事,都有点道理,“以前”是指 before now,“向前看”却是 look forward。)

在 MS 说明 backward-compatiblity 的 blog 上,很多网友表达了跟我类似的疑惑:既然 .net 各个版本之间可以互不影响的独立工作,那就没有必要去“过分”地追求 100% backward-compatibility。当然,为了大家不至于重新学习,做到尽可能兼容就可以了,但以前写的程序,就还让它们在原来的 .net framework 上运行就好了。

而至于版本迁移,决策者准备迁移之前,就应该考虑好迁移的优点和缺点,就像 PetShop 从 .net 1.x 迁移到 2.0 改动不可谓之不大,但为了利用 2.0 最新的技术,它那样去做了,到底值不值得,那就是决策者的算盘了。

好了,上面对于多数人来说都是废话,来主要的吧:

下面这段代码给你一个新选择,避免将 HyperLinkField 转换为 TemplateField ,但同时实现了 UrlEncode。

public static void HyperLinkFieldUrlEncodeHack(GridView gridView)

{

if (gridView == null)

{

return;

}

gridView.RowDataBound += delegate(object sender, GridViewRowEventArgs e)

{

if (e.Row.RowType != DataControlRowType.DataRow)

{

return;

}

for (int i = 0; i < gridView.Columns.Count; i++)

{

DataControlField field = gridView.Columns[i];

if (field is HyperLinkField)

{

log.Debug(e.Row.RowType.ToString());

TableCell td = e.Row.Cells[i];

if (td.Controls.Count > 0 && td.Controls[0] is HyperLink)

{

HyperLink hyperLink = (HyperLink)td.Controls[0];

HyperLinkField hyperLinkField = (HyperLinkField)field;

if (!String.IsNullOrEmpty(

hyperLinkField.DataNavigateUrlFormatString))

{

string[] dataUrlFields = new string

[hyperLinkField.DataNavigateUrlFields.Length];

for (int j = 0; j < dataUrlFields.Length; j++)

{

object obj = DataBinder.eval_r(e.Row.DataItem,

hyperLinkField.DataNavigateUrlFields[j]);

dataUrlFields[j] = HttpUtility.UrlEncode(

(obj == null ? "" : obj.ToString()));

}

hyperLink.NavigateUrl = String.Format(

hyperLinkField.DataNavigateUrlFormatString,

dataUrlFields);

}

}

}

}

};

}
 

顶一下
(1)
100%
踩一下
(0)
0%
标签(Tag):Android android教程 android技巧 android软件 android开发教程
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片