为了方便将本地文件提供给局域网络用户下载。我将可下载的文件地址存放在MYSQL数据库(数据表download)。
而后,用户访问页面时,自动加载数据库中(数据表download)的文件链接,当用户点击其中一个连接的时候,启动下载操作。
我最先想到的是利用listbox控件,但是当把数据加载到listbox控件以后,点击其中的一个item,再点击“下载”链接,没有反应。网上经验谈到应该把autopostback属性设置为true,但是当我autopostback=true时,每次点击listbox控件中的item,页面都要重新加载,并且download的文件都是默认的第一个item,而不是选中的item。
网上的经验谈到,这个可能是由于postback以后自动触发页面的load事件,故而应当在load事件时候对postback进行判断,如果是初始触发load事件执行初始化代码,而如果是由于postback而触发的事件,而不执行这些初始化代码。
if ispostback=false then
'执行初始化代码
else
'执行postback触发的代码
end
然而,虽然经过上述代码处理,并没有改变点击listbox中的item而总是下载默认文件的问题。
由于学艺不精,而没有恒心和毅力深究listbox的使用。因此我考虑用其他控件代替listbox控件,通过一番深究,俺选择了girdview控件作为下一个测试对象。
首先,把数据加载到gridview后,发现竟然没办法触发gridview的GridView1_SelectedIndexChanged事件,哎,原来是这个控件的使用过程中要触发选择,需要通过对控件自动添加“选择“列。后台脚本加入GridView1.AutoGenerateSelectButton = True
结果如上图。
这样以后,当点击左边的”选择“连接,就能够触发SelectedIndexChanged事件了。
gridview问题2。使用大数据以后,新问题又来了。列表的长度随着共享文件个数越多,长度越来越长,故而整个页面的格局将会变得混乱不堪。也就是页面长度也在不断的拉伸,而影响整体的控件美化(当然,主要是我不会设置控件位置或相关的属性)
因而,考虑给gridview加上滚动条。网上的做法是把gridview放在DIV里头例如(链接):
<div style="overflow-y: scroll; height: 200px">
<asp:GridView ID="GridView1" runat="server" Font-Size="12px" BackColor="#FFFFFF"
GridLines="Both" CellPadding="4" Width="560">
<HeaderStyle BackColor="#EDEDED" Height="26px" />
</asp:GridView>
</div>
但是我操作完了以后,发现,每次点击grdiview中的”选择“的时候,滚动条总是回到最上方,估计是又触发了postback事件了吧。。哎。。。
没办法了。后来又一番折腾,又发现可疑利用gridview的”分页“功能。将gridview的allowpaging属性设置为true,便可实现自动分页。
触发自动分页的html代码:
<asp:GridView ID="GridView1" runat="server" style="margin-top: 0px"
AllowSorting="True" BackColor="LightGoldenrodYellow" BorderColor="Tan"
BorderWidth="1px" CellPadding="2" GridLines="None" SelectedIndex="0"
Width="941px" ForeColor="Black" AllowPaging="True"
OnPageIndexChanging= "gv_show_PageIndexChanging">
其中:
OnPageIndexChanging= "gv_show_PageIndexChanging"
意味着当分页的页码发生变化时,触发相应的事件
相关的脚本事件:
Protected Sub gv_show_PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs)
GridView1.PageIndex = e.NewPageIndex
Dim myConn As MySqlConnection = New MySqlConnection("连接数据库代码")
myConn.Open()
Dim ad As MySqlDataAdapter = New MySqlDataAdapter("取数据", myConn)
Dim ds As New DataSet
ad.Fill(ds)
Dim dt As New Data.DataTable
dt.Columns.Add("文件名称")
For i = 0 To ds.Tables(0).Rows.Count - 1
dt.Rows.Add(ds.Tables(0).Rows(i).Item(1).ToString)
Next
‘为了使得每页显示相同的记录数,如果记录不够,自动以空记录补足
For i = 1 To GridView1.PagerSettings.PageButtonCount - (ds.Tables(0).Rows.Count Mod GridView1.PagerSettings.PageButtonCount)
dt.Rows.Add("")
Next
GridView1.EnableSortingAndPagingCallbacks = False
GridView1.DataSource = dt
GridView1.AutoGenerateSelectButton = True
GridView1.DataBind()
Dim iii As Integer = GridView1.Rows.Count
End Sub
上述代码即重新绑定gridview的数据内容即可,无须设置从第几条记录重新显示