编写asp.net文件管理器。
实际上,用户单击TreeView控件中的文件夹,该文件夹中的文件显示在ListView控件中。
ListView
<asp:listview id="lvFiles" runat="server" onitemdeleting="lvFiles_ItemDeleting"
onselectedindexchanging="lvFiles_SelectedIndexChanging">
<layouttemplate>
<table cellpadding="2" width="520px" border="1" id="tbl1" runat="server">
<tr id="Tr1" runat="server" style="background-color: #98FB98">
<th id="Th0" runat="server"></th>
<th id="Th1" runat="server">Filename</th>
<th id="Th2" runat="server">Uploaded</th>
<th id="Th3" runat="server">Last Accessed</th>
</tr>
<tr runat="server" id="itemPlaceholder" />
</table>
<asp:datapager id="DataPager1" runat="server" pagesize="25">
<fields>
<asp:nextpreviouspagerfield buttontype="Button" />
</fields>
</asp:datapager>
</layouttemplate>
<emptyitemtemplate>
<p>No items</p>
</emptyitemtemplate>
<itemtemplate>
<tr runat="server">
<td><asp:linkbutton id="itemSelected" runat="server" tooltip='<%# Eval("FullName") %>' autopostback="True" commandname="select" text="Select" />
</td>
<td><asp:label id="fNameLabel" runat="server" text='<%# Eval("Name") %>'></asp:label>
</td>
</tr>
</itemtemplate>
<selecteditemtemplate>
<tr id="Tr2" runat="server">
<td>Selected</td>
<td><asp:label id="fNameLabel" runat="server" text='<%# Eval("Name") %>'></asp:label>
</td>
<td><asp:button id="btnDelete" runat="server" text="Delete" commandname="Delete"></asp:button>
</td>
</tr>
</selecteditemtemplate>
</asp:listview>
绑定文件列表
目前发生的情况是,在TreeView_SelectedNodeChanged
事件中,应用程序采用DirectoryInfo
表示的TreeNode
对象并获取FileInfo
个对象的数组,使用DirectoryInfo.GetFiles()
方法。
将FileInfo[]
传递给以下方法。
protected void AddFilesToViewPort(FileInfo[] Files)
{
List<FileInfo> fList = new List<FileInfo>();
for (int i = 0; i < Files.Length; i++)
{
fList.Add(Files[i]);
}
lvFiles.DataSource = fList;
lvFiles.DataBind();
upExistingFiles.Update();
}
将FileInfo[]
绑定到ListView
对象lvFiles
,这正是我想要的。
我想要做的是能够在ListView中选择一个项目(可以在此刻完成),然后当用户按下Delete
按钮时,我希望应用程序使用该文件题。基本上,我想将文件移动到“已删除文件”目录并将操作记录在数据库中。
我遇到的问题是获取与我选择的列表项关联的实际FileInfo
对象。
如果我将调试器附加到并逐步执行,lvFiles_ItemDeleting
事件将被触发,我将获得所选ListItem
的索引,但是当我查看对象时在调试器中,ListItem
所代表的对象的实际信息不存在。
正如您在上图中看到的那样,ListView
的DataKeys属性正在保存有关其项目的一些信息,但是当我深入了解该属性时,信息就不存在了。
如何从选定的FileInfo
获取ListViewItem
个对象?
答案 0 :(得分:1)
看看这是否能回答你的问题:
ListViewDataItem item = lvFiles.Items[e.ItemIndex];
FileInfo fInfo = (FileInfo)item.DataItem;
您还需要指定要传递给listView的DataKeyNames。类似的东西:
<asp:listview DataKeyNames="FullName, Name" id="lvFiles" runat="server" onitemdeleting="lvFiles_ItemDeleting" onselectedindexchanging="lvFiles_SelectedIndexChanging">. read more about it [here][1]