AlphaNavigator 重制版





4.00/5 (1投票)
2005年10月5日
2分钟阅读

39852

288
对 micahbowerbank 的 AlphaNavigator 控件的重制。
引言
在浏览 The Code Project 时,我发现了一篇 micahbowerbank 撰写的关于字母导航控件的文章。我觉得这太棒了!!!我的一个客户正好提出了类似的功能需求。我最初的想法是使用一个简单的 DataGrid
并自行处理所有事情……但拖放这个控件听起来好得令人难以置信。我下载了这个控件并尝试创建一个演示项目来使用它。结果,我立刻发现该控件似乎需要打开一个连接,然后没有关闭。我尝试关闭它,结果程序崩溃了。我阅读了一些关于该控件的后续消息,并决定这可能是一个学习如何制作自定义控件的好机会。哇啦……这就是我的作品,micahbowerbank 的作品几乎没有剩下多少……也许只有一些小的引用……而且还有很多功能你可以决定添加到控件中……但是,我已经为你布局了我认为该控件的基础部分。请在评论时多加包涵,因为这是我第一次制作控件!
Using the Code
以下是使用该控件所需的代码示例。首先引用 AlphaNavigator.dll,然后将其添加到你的工具箱。接下来,将一个新的实例拖放到页面上,并在属性/事件面板中,设置 ItemCommand
事件的名称。
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
If Not IsPostBack Then
anUserBind()
End If
End Sub
Private Sub anUserBind()
Dim SQL_COMMAND As String
SQL_COMMAND = "SELECT DISTINCT SUBSTRING(UserName,1,1) "
SQL_COMMAND += "FROM USERS ORDER BY SUBSTRING(UserName,1,1)"
Dim myConnection As New OleDbConnection("SQL CONNECTION STRING HERE")
Dim myCommand As New OleDbCommand(SQL_COMMAND, myConnection)
Dim myAdapter As New OleDbDataAdapter(myCommand)
Dim myDS As New DataSet
myAdapter.Fill(myDS)
AlphaNavigator1.DataSource = myDS.Tables(0).DefaultView
AlphaNavigator1.DataBind()
End Sub
Private Sub anClick(ByVal sender As System.Object, ByVal e As _
System.Web.UI.WebControls.CommandEventArgs) _
Handles AlphaNavigator1.ItemCommand
Dim Letter As String = e.CommandArgument
End Sub
控件本身
该控件本身比原始版本复杂得多。如果你了解控件的制作,我所做的事情应该会让你明白,希望如此?如果你发现我做错了什么,我真的会很感激你通过电子邮件告诉我,因为这个控件是作为学习经验构建的,我想知道我犯了什么错误。
我遇到困难的一个领域是如何让控件内的链接按钮使用基本控件上设置的相同字体,我不得不单独设置它们……但我感觉这可以通过从主类继承来实现。
另外一点是,目前它的工作方式是你无法设置每个字母之间的间距大小。我一直在考虑添加这个功能,但现在这样也足够了。祝你好运!