2012-06-14 4 views
0

souhaitez ouvrir le fichier PDF lorsqu'un utilisateur clique sur le lien hypertexte affiché dans la colonne gridview. Le nom du fichier provient de la première colonne de la grille, où les titres de fichiers sont stockés.Ouvrir pdf à partir d'un lien hypertexte dans gridview

planant au-dessus lien hypertexte dans gridview montre le lien de fichier, mais quand on clique dessus il doesnot fichier ouvert pdf,

protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 

if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      HyperLink hlink = (HyperLink)e.Row.FindControl("HL"); 
      string url = "~/Docs/" + e.Row.Cells[1].Text +".pdf"; 
      hlink.NavigateUrl = url; 
      hlink.Text = "Read"; 
     } 
} 

L'erreur suivante est quand lien hypertexte est cliqué, car il ne peut pas ouvrir pdf fichier.

La ressource est introuvable. Description: HTTP 404. La ressource que vous recherchez (ou une de ses dépendances) aurait été supprimée, son nom a changé, ou est temporairement indisponible

qui événement est appelé lorsque lien hypertexte est cliqué dans un gridview , peut-être que l'application pdf doit être ouverte là. Veuillez suggérer. Merci à l'avance.

+3

Etes-vous absolument certain que le fichier lié est à cet endroit? Essayez de mettre la sortie de débogage de 'Server.MapPath (url);' et en s'assurant que l'emplacement du fichier physique correspond – freefaller

+0

je suis sûr que le fichier est là .... je mets même le chemin complet du fichier ... toujours la même erreur – Sumit

Répondre

3

L'erreur indique que votre fichier n'existe pas. Ce que vous devez faire est de renoncer à la concaténation que vous faites et à la place inclure le nom entier du fichier (y compris l'extension) dans votre source de données et l'utiliser (ou même le chemin entier). La raison pour laquelle vous voulez le faire est que vous avez modifié/formaté/encodé le texte de la cellule strictement à des fins esthétiques. Vous auriez même pu ajouter du code html pour le styler.

J'imagine qu'il ressemblerait à quelque chose comme ceci:

protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 

if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
      DataRow row = ((System.Data.DataRowView)e.Row.DataItem).Row; 
      HyperLink hlink = e.Row.FindControl("HL") as HyperLink; 
      if (hlink!=null) 
      { 
       string url = string.Format("~/Docs/{0}",row["FileName"]); 
       hlink.NavigateUrl = url; 
       hlink.Text = "Read"; 
      } 
    } 
} 
+0

Bonne suggestion sur stocker le nom de fichier entier. –

+0

en travaillant sur vos suggestions, j'ai travaillé en trois étapes, d'abord j'ai mis en œuvre comme c'est ce que vous avez suggéré. Deuxièmement, j'ai ajouté ".pdf" à l'URL. Troisièmement, je chemin codé dur du fichier entier. même erreur, "la ressource est introuvable". J'ai fichier au même endroit. Je pense que l'application pdf doit être appelée d'une manière ou d'une autre pour ouvrir le fichier pdf comme il le montre "La ressource que vous recherchez (ou l'une de ses dépendances) aurait pu être supprimée, avait changé de nom ou était temporairement indisponible" ..... .the depenedecies .... – Sumit

+1

Intéressant. Ce que je ferais dans ce cas @Sumit est de voir la source de la page puis d'observer le lien. En regardant le lien, voyez si vous remarquez des anomalies.Il y a un problème quelque part dans votre chemin OU le fichier n'existe pas sur le serveur. Copiez le chemin vers votre presse-papiers et collez-le dans le navigateur pour voir ce qui se passe. Il devrait faire exactement la même chose, seulement le faire de cette façon peut vous amener à voir quelque chose que vous n'aviez pas auparavant. – Jeremy

0

Avez-vous essayé cochant la case « Afficher la source » dans le navigateur sur cette page pour vérifier la trajectoire réelle du lien qui est émis et vérifier c'est correct?
Avez-vous parcouru le débogueur pour vous assurer que le FindControl("HL"); trouve effectivement le contrôle que vous recherchez? Puisque le contrôle est dans un GridView, asp.net aurait pu modifier son id. Vous pouvez essayer d'obtenir le contrôle HL utilisant

HyperLink hlink = e.Row.Cells[HL_cell_index].Controls[HL_control_index] as HyperLink; 

si vous rencontrez des problèmes là-bas. L'une de ces deux choses doit être votre problème. À titre de suggestion, en accord avec @Jeremy, vous devriez également stocker le chemin complet du fichier dans votre source de données (que ce soit la base de données ou tout ce que vous utilisez) pour lier cette colonne de lien hypertexte, de sorte que Je dois faire cette liaison d'événement supplémentaire et rencontrer des problèmes comme celui-ci.

Questions connexes