2017-10-20 1 views
1

asp.net GridView의 파일 확장명에 따라 파일 아이콘을 표시 할 수 없습니다.GridView에서 asp.net에 파일 아이콘을 표시합니다.

개체 참조 대상이있어서

의 인스턴스로 설정되지 :

의 GridView의 구조는 가이드 오류 인 Displays file icons in asp.net

nested

코드 숨김 라인 :

if (!String.IsNullOrEmpty(lnkDownload.Text)) 

아래 코드를 참조하십시오.

도와 주시겠습니까?

도움을 주셔서 감사합니다. 정말 감사드립니다.

<asp:TemplateField> 
    <ItemTemplate> 
     <img alt="" style="cursor: pointer" src="images/plus.png" /> 
     <asp:Panel ID="pnlOrders" runat="server" Style="display: none"> 
      <asp:GridView ID="gvOrders" runat="server" 
      AutoGenerateColumns="false" CssClass="mGrid" Width="700" 
      HorizontalAlign="Center"> 
       <Columns> 
        <asp:TemplateField> 
         <ItemTemplate> 
          <img id="fileImage" runat="server" src="" /> 
          <asp:HiddenField ID="HiddenField1" 
        runat="server" Value='<%# Eval("Name") %>' /> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Download" ItemStyle- 
        HorizontalAlign="Justify"> 
         <ItemTemplate> 
          <asp:LinkButton ID="lnkDownload" Text='<%# 
          Eval("Name") %>' CommandArgument= 
          '<%# Eval("FullName") %>' runat="server" 
           OnClick="lnkDownload_Click" 
           OnClientClick="if (!confirm('Confirm ?')) 
           return false;"></asp:LinkButton> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 
     </asp:Panel> 
    </ItemTemplate> 
</asp:TemplateField> 



protected void OnRowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     string root = @FilePath; 
     string folder = GridView2.DataKeys[e.Row.RowIndex].Value.ToString(); 

     GridView gvOrders = (GridView)e.Row.FindControl("gvOrders"); 
     Label gvLabel = (Label)e.Row.FindControl("gvLabel"); 
     Label gvFolder = (Label)e.Row.FindControl("gvFolder"); 


     DirectoryInfo directory = new DirectoryInfo(root + "/" + folder); 
     FileInfo[] fileInfo = directory.GetFiles("*.*", 
     SearchOption.AllDirectories); 

     fCount = directory.GetFiles("*.*", 
     SearchOption.AllDirectories).Length; 
     gvLabel.Text = fCount.ToString(); 

     long size = 0; 
     foreach (string file in Directory.GetFiles(root + "/" + folder, 
     "*.*", SearchOption.AllDirectories)) 
     { 
      size += new FileInfo(file).Length; 
     } 

     gvFolder.Text = Math.Round((double)size/(double)(1024 * 1024), 
     2).ToString() + " MB"; 

     LinkButton lnkDownload = 
     (LinkButton)e.Row.FindControl("lnkDownload"); 
     HiddenField hf = (HiddenField)e.Row.FindControl("HiddenField1"); 

     if (!String.IsNullOrEmpty(lnkDownload.Text)) 
     { 
      HtmlImage image = (HtmlImage)e.Row.FindControl("fileImage"); 
      image.Attributes.Add("src", GetIconForFile(hf.Value)); 
     } 

     gvOrders.DataSource = fileInfo; 
     gvOrders.DataBind(); 
    } 
} 

private string GetIconForFile(string fileText) 
{ 
    string extension = Path.GetExtension(fileText); 
    extension = extension.Trim('.').ToLower(); 
    return "~/fileicons/" + extension + ".png"; 
} 
+1

당신이 읽을나요 http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do- 이미 고칠 수 있니? '(LinkButton) e.Row.FindControl ("lnkDownload")'컨트롤이 없으면 null을 반환하고, Text 속성에 액세스 할 때는 NRE를 던집니다. –

+0

어떤 구조를 사용하고 있습니까? 중첩 된 또는 간단한? – AsifAli72090

+0

@ Asif.Ali Nested –

답변

1

중첩 된 GridView 구조가 있고 gvOrders이 내부 GridView입니다. 그래서, 당신은 등 내부의 GridView의 행에서의 LinkButton을 얻을했습니다 :

protected void OnRowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     GridView gvOrders = (GridView)e.Row.FindControl("gvOrders"); 

     foreach (GridViewRow row in gvOrders.Rows) 
     { 
      LinkButton lnkDownload = (LinkButton)row.FindControl("lnkDownload"); 
      HiddenField hf = (HiddenField)row.FindControl("HiddenField1"); 

      if (!String.IsNullOrEmpty(lnkDownload.Text)) 
      { 
       //... some code 
      } 
     } 
    } 
} 
관련 문제