0

サーバー上のファイル ディレクトリからファイル名を取得する GridView にハイパーリンク フィールド列を追加しようとしています。以下のコードを使用していますが、正確には機能していません。パスとファイル名が表示されていますが、クリック可能なハイパーリンク フィールドではありません。何が間違っているのかわかりません。誰か助けてもらえますか?

public void GetFilesAndFolders()
    {
        using (IREPEntities dbContext = new IREPEntities())
        {

            String vcharTempFileLocation = (from a in dbContext.tbl_ApplicationSetting
                                            where a.vcharKey == "vcharTempFileLocation"
                                            select a).Single().vcharValue;

            DataTable gridviewSource = DisplayFilesInGridView();
            DataRow gridviewRow;

            //Get All Folders Or Directories and add in table  
            DirectoryInfo directory = new DirectoryInfo(vcharTempFileLocation);
            DirectoryInfo[] subDirectories = directory.GetDirectories();

            foreach (DirectoryInfo dirInfo in subDirectories)
            {
                gridviewRow = gridviewSource.NewRow();
                gridviewRow["Claim"] = ddlClaimNumber.SelectedItem;
                gridviewRow["Name"] = dirInfo.Name;
                dynamic newlink = new HyperLinkField();

                newlink = vcharTempFileLocation + dirInfo.Name;

                gridviewRow["link"] = newlink;
                gridviewRow["Application"] = chkApplicationType.SelectedItem;

                gridviewSource.Rows.Add(gridviewRow);
            }




            //Get files in all directories  

            FileInfo[] files = directory.GetFiles("*.*", SearchOption.AllDirectories);
            foreach (FileInfo fileInfo in files)
            {
                gridviewRow = gridviewSource.NewRow();
                gridviewRow["Claim"] = ddlClaimNumber.SelectedItem;
                gridviewRow["Name"] = fileInfo.Name;
                dynamic newlink = new HyperLinkField();

                newlink = vcharTempFileLocation + fileInfo.Name;

                gridviewRow["link"] = newlink;
                gridviewRow["Application"] = chkApplicationType.SelectedItem;                                   

                gridviewSource.Rows.Add(gridviewRow);
            }                        


            gvBatchDetails.DataSource = gridviewSource;
            gvBatchDetails.DataBind();

        }

    }
    private DataTable DisplayFilesInGridView()
    {
        DataTable dtgridviewSource = new DataTable();
        dtgridviewSource.Columns.Add(new DataColumn("Claim", typeof(System.String)));
        dtgridviewSource.Columns.Add(new DataColumn("Name", typeof(System.String)));
        dtgridviewSource.Columns.Add(new DataColumn("Application", typeof(System.String)));
        dtgridviewSource.Columns.Add(new DataColumn("link", typeof(System.String)));

        return dtgridviewSource;
    }


}
4

1 に答える 1

0

GridView を手動で構築する代わりに、バインドできるデータソースを作成します。

まず、詳細を保持するカスタム クラスを作成します。

public class FileOrFolderDetail
{
    public string Claim{get;set;}
    public string Name{get;set;}
    public string Link{get;set'}
    public string Application{get;set;}
}

次に、List新しいクラスの を作成します。

var fileOrFolderDetails = new List<FileOrFolderDetail>();

その時点で、今までと同じように 2 つのループを実行しますが、新しいFileOrFolderDetailオブジェクトを作成してList.

最後に、 を にバインドGridViewし、 ASPX で をとして使用するようにfileOrFolderDetails設定します。HyperLinkFieldLinkDataNavigateUrl

そこから始めましょう。必要に応じて微調整できます。

于 2013-08-15T20:16:23.580 に答える