2

asp.net ファイル マネージャーを作成します。

基本的に、ユーザーが TreeView コントロール内のフォルダーをクリックすると、そのフォルダー内のファイルが 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の配列を取得します。FileInfoDirectoryInfo.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 がないことを示す画像

上の画像でわかるように、 の DataKeys プロパティはListViewその項目に関する情報を保持していますが、そのプロパティをさらに掘り下げてみると、情報がそこにありません。

FileInfo選択した からオブジェクトを取得するにはどうすればよいListViewItemですか?

4

1 に答える 1

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]
于 2012-10-24T10:35:31.583 に答える