Avatar billede tchami Nybegynder
31. maj 2004 - 22:41 Der er 9 kommentarer og
1 løsning

[ASP.NET] Vise/skjule placeholder i datalist

Hej,

Jeg prøver at vise nogle db records i en datalist. Hvis længden af et et specifikt felt i databasen er større end 0 skal der sættes et "Læs mere" link ind i den tilhørende item i datalisten, ellers skal dette link "Læs mere" ikke vises. Jeg kan dog ikke hitte ud af hvordan jeg lige griber det an. Har på fornemmelsen at jeg har stirret mig helt blind på problemet, så her følger koden:

Usercontrol:
<code>
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="weblog.ascx.cs" Inherits="dda.modules.weblog.weblog" %>
<asp:Datalist Width="100%" ID="dtNews" Runat="server">

<div class="ContentPaneContent">
<%#((DataRowView)Container.DataItem)["teaser"]%>
</div>

<asp:PlaceHolder ID="<%#((DataRowView)Container.DataItem)["id"]%>" Runat="server">
<div class="ContentPaneUpperFooter">   
  <%#(ShowMore(Convert.ToInt32(((DataRowView)Container.DataItem)["contentlength"]),Convert.ToString(((DataRowView)Container.DataItem)["id"])))%> 
</div> 
</asp:PlaceHolder>

</asp:Datalist>
</code>

Code-behind:
<code>
namespace dda.modules.weblog
{
using System;
using System.Configuration;
using System.Data;
using System.Data.Odbc;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

/// <summary>
///  Summary description for weblog.
/// </summary>
public class weblog : PortalModuleControl
{

  protected DataList dtNews;
  protected Label lblStatus;

  private void Page_Load(object sender, System.EventArgs e)
  {
  if(!Page.IsPostBack)
  {
  dtNews.DataSource = GetNews();
  dtNews.DataBind();
  }

  }
 
  public bool ShowMore(int length, string id)
  {
  bool show = false;
 
  if (length > 0)
  {   
    //show placeholder.id = id
    show = true;
  }
 
  return show;
  }
  public DataSet GetNews()
  {
  string strSQL = "SELECT id, headline,teaser,LENGTH(content) as contentlength, category FROM table";
  DataSet dtNews = new DataSet();

  try
  {
    OdbcConnection objConn = new OdbcConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
    OdbcDataAdapter objDa = new OdbcDataAdapter(); 
    objDa.SelectCommand = new OdbcCommand(strSQL, objConn);
    objDa.Fill(dtNews, "News");
  }
  catch(Exception e)
  {
    lblStatus.Text = e.ToString();
  }

  return dtNews; 
  }
}
}
</code>

Hvis ShowMore er sand skal linket (eller dvs. hele PlaceHolderen) vises, ellers ikke. Hvordan gør jeg det?

På forhånd tak.
Avatar billede burningice Nybegynder
31. maj 2004 - 23:28 #1
du kan ikke lave nogen form for conditional programming i en databinding-block

det jeg ville gøre hvis jeg var dig, var at lytte på OnItemDataBound-eventen som bliver fyret af hver gang at en linje i dit datalist skal til at renderes. Heri kan du programmere dig ud af det på helt legalt vis.
Avatar billede tchami Nybegynder
31. maj 2004 - 23:36 #2
Ahhh, det må jeg prøve.

Jeg vender tilbage..
Avatar billede burningice Nybegynder
31. maj 2004 - 23:46 #3
Avatar billede jakobg Nybegynder
31. maj 2004 - 23:47 #4
Du kan bruge Iif-funktionen ude på din aspx-side:

<%# iif(Container.DataItem("ShowMore"), "dit link", "ingenting" ) %>
Avatar billede burningice Nybegynder
31. maj 2004 - 23:57 #5
iif er kun til visualbasic... c# bruger ? operatoren

Container.DataItem("ShowMore") ? "dit link" : "ingenting";

det kræver bare at Container.DataItem("ShowMore") er af typen Bool
Avatar billede tchami Nybegynder
01. juni 2004 - 00:05 #6
public void Item_Bound(object sender, DataListItemEventArgs e)
{
    int length = Convert.ToInt32(((DataRowView)e.Item.DataItem).Row.ItemArray[3].ToString());
    Panel myPanel = new Panel();
    myPanel = (Panel)e.Item.FindControl("pShowMore");
    if (length == 0) myPanel.Visible = false;
}

virker :)

Smid et svar cyberfessor.
Avatar billede burningice Nybegynder
01. juni 2004 - 07:56 #7
svar :)
Avatar billede tchami Nybegynder
01. juni 2004 - 11:44 #8
næ :)
Avatar billede burningice Nybegynder
01. juni 2004 - 14:30 #9
ups... hehe
Avatar billede tchami Nybegynder
01. juni 2004 - 14:33 #10
:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester