Archief - ASP.NET: Gridview: blog

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

FunnyBunny

Legacy Member
<asp:TemplateField HeaderText='<%=naam%>'>
<ItemTemplate>
<table>
<tr>
<td><p><asp:Label ID="Label3" runat="server" Text='<%# Eval("titel") %>'></asp:Label></p></td>
</tr>
<tr>
<td><asp:Label ID="Label4" runat="server" Text='<%# Eval("verhaal") %>'></asp:Label></td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>

Ik wil de value van "naam" die ik ophaal uit een tabel in de headertext van het templatefield steken, maar heeft iemand een idee hoe ik deze value in headertext krijg?

Ik ben een soort blog aan het maken waarbij er verschillende vakjes met commentaar van bezoekers wordt getoond. Ik wil hierbij een gridview gebruiken met 1 templatefield. Is er mss ook een andere manier om dit te doen?

n00bslayer

Legacy Member
Je kan je TemplateField in je achterliggende programmacode genereren bij je Page_Load event, en zo de headertext dynamisch meegeven.

Web User Controls waar je parameters aan meegeeft kunnen een oplossing bieden als je template-gewijs wil werken ipv DOM-gewijs.

FunnyBunny

Legacy Member
Maar als ik de templatefield in de code ga genereren dan ga ik toch verschillende kolommen naast elkaar krijgen ipv tabellen onder elkaar.

Ik heb geprobeerd het zo te doen maar ik snap niet hoe je je TemplateField in je code kunt genereren? Deze templatefield hoort thuis bij een gridview die aangesloten is op een datasource.

BloodSeaker

Legacy Member
Eens zien he

Code:
<asp:TemplateField HeaderText='<%=naam%>'>
<ItemTemplate>
<table>
<tr>
<td><p><asp:Label ID="Label3" runat="server" Text='<%# Eval("titel") %>'></asp:Label></p></td>
</tr>
<tr>
<td><asp:Label ID="Label4" runat="server" Text='<%# Eval("verhaal") %>'></asp:Label></td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
uiteraard zijn er verschillende methodes om dit te doen.

1 methode is om in je Page_Load of Page_Init event een variabele 'naam' op te vullen (deze variabele 'naam' is dan een public of protected variabele van je class; NIET in je functie deze declareren, dan is hij immers niet gekend op de plaats waar je hem wenst te gebruiken)
Methode 2 bestaat erin om in je codebehind na de databinding van de gridview te zetten: gridviewnaam.rows[0].cells[x].Text = waarde_uit_database te zetten.


Leuk zo, maar wat mij vooral opvalt is: Waarom gebruik je een grid met een itemtemplate om een blog weer te geven???
Je zet nl. een hele tabelstructuur in je itemtemplate, terwijl een gridview zelf ook nog eens een tabel structuur uitrendert. Ik hoop dus dat je een repeater gebruikt. En als je dan een repeater gebruikt, wordt het allemaal heel anders, dan kun je eerder zoiets maken

Code:
<div id="blogContainer">
<asp:Repeater ID="repBlog" runat="server" onItemDataBound="repBlog_ItemDataBound">
  <ItemTemplate>
    <div class="blogEntry">
          <h3><asp:Literal ID="litTitle" runat="server" /></h3>
          <div class="blogText>
               <asp:Literal id="litEntry" runat="server" />
          </div>
          <div class="postedBy"><asp:Literal id="litAuthor" runat="server" /></div>
    </div>
  </ItemTemplate>
</asp:Repeater>
</div>

In je code-behind file vang je dan het event repBlog_ItemDataBound op (check msdn voor de correcte argumenten), waar je dan simpelweg het volgende doet (wel met nog de nodige checks uiteraard) (C# code)

Code:
DataRowView drv  = (DataRowView)e.Item.DataItem; //e is het 2e argument van de functie)
Literal litTitle = (Literal)e.Item.FindControl("litTitle");
litTitle.Text = drv["itemuitdatabase"].ToString();
//en vul op dezelfde manier aan met de andere velden
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan