none
如何處理FileInfo與ArrayList資料 RRS feed

  • 問題

  • .aspx內的語法
    -----------------------------------------------------------------------------------------------------
    <asp:GridView ID="FolderListGV" runat="server">
            <Columns>
                <asp:HyperLinkField DataTextField="Name" DataNavigateUrlFields="Name" DataNavigateUrlFormatString="ADM/2-RD/{0}" HeaderText="姓名" />
            </Columns>
        </asp:GridView>

    .cs內的語法
    -----------------------------------------------------------------------------------------------------
        protected void Page_Load(object sender, EventArgs e)
        {
             //FolderListGV資料夾及資料列表
            ArrayList fileArray = new ArrayList();
            FileInfo info;
           

            string[] files = Directory.GetFiles(Server.MapPath("ADM/2-RD/"), "*.msg");

     

            //將每一個檔案資訊加入ArrayList裡 
            foreach (string item in files)
            {

                info = new FileInfo(item);
                fileArray.Add(info);


                //將檔案資訊加入DropDownList
                //this.FolderListGV.Items.Add(new ListItem(info.Name));         
            }
               
            FolderListGV.DataSource = fileArray;
            FolderListGV.DataBind();
        }

    Q1.問題是我顯示在gridview內的檔案名稱很長,我想要修改名稱,我該修改 info 內的資料還是 fileArray 內的資料,要如何單抓檔案名稱?
    Q2.gridview要如何接我處理過的變數?

    2009年12月25日 上午 03:24

解答

  • ArrayList只是資料來源,跟GridView沒什麼關係
    GridView只負責呈現資料

    91大的意思大致上是這樣:
    .aspx
    <asp:GridView ID="FolderListGV" runat="server" 
        onrowdatabound="FolderListGV_RowDataBound">
        <Columns>
            <asp:HyperLinkField DataTextField="Name" DataNavigateUrlFields="Name"
    	DataNavigateUrlFormatString="ADM/2-RD/{0}" HeaderText="姓名" />
        </Columns>
    </asp:GridView>
    .cs
    protected void Page_Load(object sender, EventArgs e) {
        //FolderListGV資料夾及資料列表
        ArrayList fileArray = new ArrayList();
        FileInfo info;
    
    
        string[] files = Directory.GetFiles(Server.MapPath("ClientBin"), "*.*");
    
    
    
        //將每一個檔案資訊加入ArrayList裡  
        foreach (string item in files) {
    
            info = new FileInfo(item);
            fileArray.Add(info);
    
    
            //將檔案資訊加入DropDownList
            //this.FolderListGV.Items.Add(new ListItem(info.Name));          
        }
    
        FolderListGV.DataSource = fileArray;
        FolderListGV.DataBind();
    
    
    }
    
    protected void FolderListGV_RowDataBound(object sender, GridViewRowEventArgs e) {
        if (e.Row.RowType == DataControlRowType.DataRow) {
            HyperLink link = (System.Web.UI.WebControls.HyperLink)e.Row.Cells[0].Controls[0];
            if (link.Text.Length > 10)
                link.Text = link.Text.Substring(0, 10) + "...";
    
        }
    }

    不過你的GridView沒有取消AutoGenerateColumns,所以會跑一堆欄位出來,畫面寬度應該還是不夠你用
    我想你需要的應該是把AutoGenerateColumns設為false,然後自己去加GridView的欄位

    • 已編輯 阿尼Moderator 2009年12月26日 下午 03:33 排版
    • 已標示為解答 Open1008 2009年12月26日 下午 05:48
    2009年12月26日 下午 03:31
    版主

所有回覆

  • 要不要考慮把那一欄改成TemplateField,
    在RowDataBound針對Binding的資料,作長度判斷與字串的取代。
    例如長度超過30,之後的取代為『...』,
    再透過tooltip來顯示全名..
    In 91 :http://www.dotblogs.com.tw/hatelove/Default.aspx
    2009年12月25日 上午 03:39
    版主
  • HI,

    您可以不需要修改info或fileArray的內容, 您可以為GridView加入樣版欄位, 於樣版欄位放置Label控制項, 把不含路徑的檔案名稱設定給Label控制項的Text, 再把檔案包含路徑的全名設定給Label控制項的ToolTip屬性.
    2009年12月25日 上午 03:52
  • 要不要考慮把那一欄改成TemplateField,
    在RowDataBound針對Binding的資料,作長度判斷與字串的取代。
    例如長度超過30,之後的取代為『...』,
    再透過tooltip來顯示全名..
    In 91 :http://www.dotblogs.com.tw/hatelove/Default.aspx

    我太清楚gridview如何去接ArrayList顯示在gridview內
    他們之間資料的關係如何
    2009年12月26日 上午 07:18
  • ArrayList只是資料來源,跟GridView沒什麼關係
    GridView只負責呈現資料

    91大的意思大致上是這樣:
    .aspx
    <asp:GridView ID="FolderListGV" runat="server" 
        onrowdatabound="FolderListGV_RowDataBound">
        <Columns>
            <asp:HyperLinkField DataTextField="Name" DataNavigateUrlFields="Name"
    	DataNavigateUrlFormatString="ADM/2-RD/{0}" HeaderText="姓名" />
        </Columns>
    </asp:GridView>
    .cs
    protected void Page_Load(object sender, EventArgs e) {
        //FolderListGV資料夾及資料列表
        ArrayList fileArray = new ArrayList();
        FileInfo info;
    
    
        string[] files = Directory.GetFiles(Server.MapPath("ClientBin"), "*.*");
    
    
    
        //將每一個檔案資訊加入ArrayList裡  
        foreach (string item in files) {
    
            info = new FileInfo(item);
            fileArray.Add(info);
    
    
            //將檔案資訊加入DropDownList
            //this.FolderListGV.Items.Add(new ListItem(info.Name));          
        }
    
        FolderListGV.DataSource = fileArray;
        FolderListGV.DataBind();
    
    
    }
    
    protected void FolderListGV_RowDataBound(object sender, GridViewRowEventArgs e) {
        if (e.Row.RowType == DataControlRowType.DataRow) {
            HyperLink link = (System.Web.UI.WebControls.HyperLink)e.Row.Cells[0].Controls[0];
            if (link.Text.Length > 10)
                link.Text = link.Text.Substring(0, 10) + "...";
    
        }
    }

    不過你的GridView沒有取消AutoGenerateColumns,所以會跑一堆欄位出來,畫面寬度應該還是不夠你用
    我想你需要的應該是把AutoGenerateColumns設為false,然後自己去加GridView的欄位

    • 已編輯 阿尼Moderator 2009年12月26日 下午 03:33 排版
    • 已標示為解答 Open1008 2009年12月26日 下午 05:48
    2009年12月26日 下午 03:31
    版主