• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[翻译]asp.net 1.x/2.0中的高级列表控件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
原文地址:http://aspalliance.com/1071_Smart_ListControl_in_ASPNET_1x20
[原文源码下载]
[译者改后源码下载]


[翻译]asp.net 1.x/2.0中的高级列表控件


原文发布日期:2006.11.16
作者:Bilal Haidar
翻译:webabcd


摘要
本文中Bilal Haidar将告诉你如何在asp.net 1.x/2.0下开发一个高级列表控件,使它可以在客户端保存其自身每一项的变化。


文章内容
介绍
解决方案
类的实现
实现IPostBackDataHandler接口
如何使用新控件
下载
结论


类的实现
当我们要改善ListBox控件之后,首先要做的就是要继承ListBox类。目标是给这个类增加实现客户端各个项变化的功能。

下面的代码说明了如何继承ListBox类。

列表1

public class xListBox : ListBox
}

ListBox控件所有的公共属性和方法都将可以像以前一样被使用。有一个要引起注意的方法,就是OnPreRender,这个方法将被override以增加前面所说的两个隐藏字段。

OnPreRender如下:

列表2
protected override void OnPreRender(EventArgs e)
}

当你要写自己自定义控件的时候,几乎每次都要override基类的OnPreRender,这是通过基类增加功能,保存代码的通常做法。

任何客户端代码,像javascript或者任何注册在父控件的控件,都应该在控件的这个生命周期(PreRender)中实现。

注意,我们已经在关键字UtilMethods注册了一段javascript代码。这段代码提供了两个客户端函数,主要是AddItemToList和RemoveItemFromList。这些函数使用了前面所提到的两个隐藏字段。它们已经实现了这样一个功能,就是两个隐藏字段保持同步,以使两个隐藏字段不会出现同一项。

这段javascript代码出示如下:

列表3
// 增加新项到 ListBoxID_ADDED 隐藏字段中
function AddListItem(listName, text, value)
 

上面这段代码已经写到了OnPreRender方法中,稍后当我们讨论“如何使用新控件”的时候再和大家说明如何调用这些方法。

这有三个方法:
AddListItem
RemoveListItem
GetHiddenField

AddListItemt通过取得用于保存增加项的隐藏字段的ID设置该隐藏字段所包含的ListBox控件的增加项。新增加的项将会按照(Text|Value)的格式增加到用于保存增加项的隐藏字段中。如果其中有的项在用于保存删除项的隐藏字段中,则在用于保存增加项的隐藏字段中删之。这保证了删除项保存在用于保存删除项的隐藏字段,增加项保存在用于保存增加项的隐藏字段的正确性。

RemoveListItem通过取得用于保存删除项的隐藏字段的ID设置该隐藏字段所包含的ListBox控件的删除项。被删除的项的value将会保存到用于保存删除项的隐藏字段中,每一项用分隔符“,”标记。每次删除都会检查一次用于保存增加项的隐藏字段以保证用于保存删除项的隐藏字段和用于保存增加项的隐藏字段的值不会有冲突。

最后的GetHiddenField是一个在网页中找到隐藏字段的常用方法。


        bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)
        }

这段代码首先实现了原来asp.net下的ListBox控件的LoadPostData方法

第二部分实现了通过用于保存删除项的隐藏控件存储的value从ListBox中删除项的功能

第三部分实现了通过用于保存增加项的隐藏控件存储的text|value从ListBox中增加项的功能

我们没有更多的说RaisePostDataChangedEvent方法,因为它的实现比较简单。

列表5
void IPostBackDataHandler.RaisePostDataChangedEvent()
}

这个方法什么时候被调用呢?通过LoadPostData返回来的Boolean值来判断是否触发该方法。如果返回值为true,则证明被选中的值发生了变化,所以需要调用OnSelectedIndexChanged这个方法。

另外,如果LoadPostData返回的值为false,则证明选中的值没有发生变化,所以不用调用OnSelectedIndexChanged方法。

通过以上所说的,我们已经完成了一高级ListBox控件。接下来的部分,我们将看到一个例子来说明如何在webform中使用这个控件,如何调用前面所提及的那两个javascript函数。


    function RemoveItem()
    }

你可以看到,这些代码已经有了自身的注释。当我们从ListBox中删除项的时候,我们已经可以检测到被选项了。最后,我们示例了一下如何调用新的ListBox中的那些客户端方法。

ListBox的ID和要被删除的项的value作为RemoveListItem需要的参数。

当你要向ListBox中增加项的时候,你只要简单的在两个textbox输入text和value,然后按“增加新项”按钮即可。这个按钮所触发的客户端代码如下:

列表7
    function AddItem()
     }

首先创建一个新项,然后把这个新项插入到ListBox中,之后再把新项增加到用于保存增加项的隐藏字段中。

在回发服务器后,你应该注意到ListBox中的各个项与发送服务端之前的各个项是相同的。这就证明这个控件已经达到了我们预期的功能。


结论
在这篇文章里,我们一起知道了如何创建一个基于asp.net里的ListBox控件的新的自定义控件。

另外,我们一起了解了如何解决ListBox和所用继承自ListControl基类的控件的客户端操作无法在回传服务端后保存的问题。

希望你喜欢这篇文章

祝.net开发愉快。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap