Доступ к элементам данных на Select с помощью ListView
Написание 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, просто нет.

Как вы можете видеть на рисунке выше, свойство DataKeys ListView содержит некоторую информацию о его предметах, но когда я углубляюсь в это свойство, информации просто нет.
Как получить объект FileInfo из выбранного объекта ListViewItem?
1 ответ:
Смотрите, отвечает ли это на ваш вопрос:
ListViewDataItem item = lvFiles.Items[e.ItemIndex]; FileInfo fInfo = (FileInfo)item.DataItem;Вам также необходимо указать имена данных, которые вы хотите передать в listView. что-то вроде:
<asp:listview DataKeyNames="FullName, Name" id="lvFiles" runat="server" onitemdeleting="lvFiles_ItemDeleting" onselectedindexchanging="lvFiles_SelectedIndexChanging">. read more about it [here][1]
Comments