2011-06-05 2 views
0

Dans mon first question j'ai commencé à ajouter des hyperliens à un gridview. Maintenant, j'ai enfermé le même gridview dans un accordéon Ajax. Malheureusement, il a rendu ma méthode d'ajout d'hyperliens inutile car la méthode OnRowDataBound renvoie l'erreur suivante:Ajout de liens hypertexte à gridview enfermé dans Ajax Accordion

"Impossible de convertir l'objet de type 'System.Web.UI.LiteralControl' en type System.Web.UI.WebControls.HyperLink '. "

sur la ligne:

HyperLink nameHl = (HyperLink)e.Row.Cells[0].Controls[0];

Maintenant, j'ai essayé le:

NavigateUrl='<%# "http://websitelink" + DataBinder.Eval(Container.DataItem,"Name") %>'

façon, mais avec la convention de nommage du suffixe du lien et la façon dont je remplacer les espaces noirs avec "+". cela ne va pas vraiment marcher pour mon projet. De plus, le lien du site peut ne pas toujours être le même, donc je préférerais que le lien hypertexte soit défini côté serveur que côté client.

Toute aide serait grandement appréciée. Mon code est le suivant:

côté client:

<asp:Accordion ID="Accordion1" runat="server" FadeTransitions="true" Width="935px" 
SuppressHeaderPostbacks="true" OnItemDataBound="Accordion1_ItemDataBound" 
CssClass="acc-content" HeaderCssClass="acc-header" HeaderSelectedCssClass="acc-selected" TransitionDuration="250" FramesPerSecond="40" RequireOpenedPane="False"> 
<HeaderTemplate> 
     <%#DataBinder.Eval(Container.DataItem,"Rpt_Grouping") %> 
</HeaderTemplate> 
<ContentTemplate> 
     <asp:HiddenField ID="hlbl_categoryID" runat="server" Value='<%#DataBinder.Eval(Container.DataItem,"Rpt_Grouping") %>' /> 
     <asp:GridView ID="accGvReportList" runat="server" RowStyle-BackColor="#ededed" RowStyle-HorizontalAlign="Left" AutoGenerateColumns="false" GridLines="None" CellPadding="2" CellSpacing="2" Width="100%" OnRowDataBound="accGvReportList_RowDataBound"> 
       <Columns> 
        <asp:TemplateField HeaderStyle-HorizontalAlign="Left" HeaderText="Report Name" HeaderStyle-BackColor="#d1d1d1" HeaderStyle-ForeColor="#777777"> 
          <ItemTemplate> 
            <asp:HyperLink ID="contentLink" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"Name") %>' /> 
          </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderStyle-HorizontalAlign="Left" HeaderText="Report Description" HeaderStyle-BackColor="#d1d1d1" HeaderStyle-ForeColor="#777777"> 
          <ItemTemplate> 
            <%#DataBinder.Eval(Container.DataItem, "Description")%> 
          </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
     </asp:GridView> 
    </ContentTemplate></asp:Accordion> 

côté serveur:

 // binds the DB table to the grid inside the accordion tool 
    protected void Accordion1_ItemDataBound(object sender, AjaxControlToolkit.AccordionItemEventArgs e) 
    { 
     if (e.ItemType == AjaxControlToolkit.AccordionItemType.Content) 
     { 
      string listPath = "/subcat%"; 
      string categoryValue = ((HiddenField)e.AccordionItem.FindControl("hlbl_categoryID")).Value; 
      DataTable dtReportList = objInfoDal.getReportListDetails(listPath, ddlFolders.SelectedValue.ToString(), categoryValue); 

      GridView grd = new GridView(); 

      grd = (GridView)e.AccordionItem.FindControl("accGvReportList"); 
      grd.DataSource = dtReportList; 
      grd.DataBind(); 

     } 
    } 

    // hyperlink binding by row for first column in gridview in the accordion tool 
    protected void accGvReportList_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     //Changes text in the first column into HyperLinks 
     HyperLinkField nameLink = gvReportList.Columns[0] as HyperLinkField; 

     string linkPath = "http://websitelink"; 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      //applies a unique suffix to the address depending on the link name 
      HyperLink nameHl = (HyperLink)e.Row.Cells[0].Controls[0]; 
      string nameText = nameHl.Text; 
      string linkSuffix = nameText.Replace(" ", "+"); 
      nameHl.NavigateUrl = linkPath + linkSuffix; 
     } 
    } 

Répondre

Questions connexes