2009-11-30 11 views
3

J'ai un problème j'espère que quelqu'un peut vous aider. J'ai une dynamique Gridview. Je dois avoir une colonne hyperlink sur gridview. Ces liens hypertexte devraient ouvrir un popup pour afficher certaines données en cliquant.Comment ajouter un lien hypertexte à une colonne gridview dynamique

J'ai essayé ceci en ayant un champ de modèle dynamique. Mais même en liant les données, je suis incapable d'obtenir le lien hypertexte pour la colonne. Je suis en mesure d'obtenir les données mais pas le lien hypertexte.

Il s'agit de la classe HyperLinkTemplate qui met en œuvre ITemplate.

public class HyperLinkTemplate : ITemplate 
{ 
    private string m_ColumnName; 
    public string ColumnName 
    { 
     get { return m_ColumnName; } 
     set { m_ColumnName = value; } 
    } 

    public HyperLinkTemplate() 
    { 
     // 
     // TODO: Add constructor logic here 
     // 
    } 
    public HyperLinkTemplate(string ColumnName) 
    { 
     this.ColumnName = ColumnName; 

    } 

    public void InstantiateIn(System.Web.UI.Control ThisColumn) 
    { 
     HyperLink HyperLinkItem = new HyperLink(); 
     HyperLinkItem.ID = "hl" + ColumnName; 
     HyperLinkItem.DataBinding += HyperLinkItem_DataBinding; 
     ThisColumn.Controls.Add(HyperLinkItem); 

    } 

    private void HyperLinkItem_DataBinding(object sender, EventArgs e) 
    { 
     HyperLink HyperLinkItem = (HyperLink)sender; 
     GridViewRow CurrentRow = (GridViewRow)HyperLinkItem.NamingContainer; 
     object CurrentDataItem = DataBinder.Eval(CurrentRow.DataItem, ColumnName); 
     HyperLinkItem.Text = CurrentDataItem.ToString(); 
    } 
} 

Répondre

9

Je ne suis pas tout à fait sûr que je comprends ce que vous essayez d'accomplir, mais je ne pense pas que vous devez construire votre propre classe de modèle pour cela. Vous pouvez vouloir dire quelque chose d'autre que ce que je pense par le terme "gridview dynamique", mais si vous devez ajouter un lien hypertexte à chaque ligne d'une colonne dans un GridView, et si vous devez le faire dans le code-behind, alors je suggère de gérer l'événement RowDataBound de GridView et de faire quelque chose comme ce qui suit dans le gestionnaire d'événements:

protected void grdData_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      HyperLink link = new HyperLink(); 
      link.Text = "This is a link!"; 
      link.NavigateUrl = "Navigate somewhere based on data: " + e.Row.DataItem; 
      e.Row.Cells[ColumnIndex.Column1].Controls.Add(link); 
     } 
    } 
+0

Grand J'ai pu créer le lien comme vous l'avez dit. Mais maintenant je dois avoir une fenêtre contextuelle en cliquant sur le lien hypertexte. Un paramètre doit passer à l'écran contextuel. Une idée ?? – Avi

+0

Désolé pour la réponse tardive. Il y a plusieurs façons de le faire. Je dirais que le plus simple serait d'utiliser javascript pour créer une autre fenêtre. Vous pouvez créer une fonction javascript comme celle-ci et transmettre l'URL avec votre paramètre dans la chaîne de requête: function createWindow (url) { \t var newWindow = window.open (url, "newWindow", "barre d'outils = oui, barres de défilement = oui, largeur = 650, hauteur = 500 "); } Une autre option consiste à utiliser Microsoft Ajax Control Toolkit, qui inclut une fonctionnalité popup agréable. Mon expérience suggère qu'il n'est pas trop difficile de travailler avec si vous gardez les choses simples. –

+0

J'ai un fichier .csv à ouvrir sur un lien hypertexte cliquez sur ... pouvez-vous m'aider s'il vous plaît à ce sujet? Je vous remercie. – shruti

Questions connexes