DotNetNewsgroup.com  
web access to complete list of Microsoft.NET newsgroups
   home   |   control panel login   |   archive  |  
 
  carried group
academic
adonet
aspnet
aspnet.announcements
aspnet.buildingcontrols
aspnet.caching
aspnet.datagridcontrol
aspnet.mobile
aspnet.security
aspnet.webcontrols
aspnet.webservices
assignment_manager
datatools
dotnet.distributed_apps
dotnet.general
dotnet.myservices
dotnet.nternationalization
dotnet.scripting
dotnet.security
dotnet.vjsharp
dotnet.vsa
dotnet.xml
dotnetfaqs
framework
framework.clr
framework.compactframework
framework.component_services
framework.controls
framework.databinding
framework.drawing
framework.enhancements
framework.interop
framework.odbcnet
framework.performance
framework.remoting
framework.sdk
framework.setup
framework.webservices
framework.windowsforms
framework.wmi
frwk.windowsforms.designtime
lang.csharp
lang.jscript
lang.vb
lang.vb.controls
lang.vb.data
lang.vb.upgrade
lang.vc
lang.vc.libraries
  
 
start date: Tue, 31 Jul 2007 16:20:07 -0400,    posted on: microsoft.public.dotnet.framework.aspnet        back       

Thread Index
  1    Homer J. Simpson
          2    Brandon Gano
          3    Homer J. Simpson


DataList--is it wrong to do this? If so, what's the correct way?   
I feel I'm not doing things correctly.

I have a <asp:DataList> embedded in a <asp:Panel> with its ScrollBars 
property set to Auto.  Essentially, I want to format a bunch of records as a 
list in an area of the screen with a fixed size, so I want a scrollbar to 
appear if I have a lot of records.  That works fine.

Each row in my list consists of three fields that come from a database:  a 
date, a title (both on the same line), and followed by a longer description 
below that first line.  Knowing that the rendered HTML contains leading 
table, tr and td tags, I've added my own tags right into the <ItemTemplate>:

<asp:DataList DataSourceID="..." >
<ItemTemplate>
        <div class="clsDate"><%# Eval("MYDATE") %></div></td>
        <td><div class="clsTitle"><%# Eval( "MYTITLE") %></div></td>
    </tr>
    <tr>
        <td colspan="2"><div class="clsDescription"><%# Eval( 
"MYDESCRIPTION" ) %></div>
</ItemTemplate>
</asp:DataList>

This lines up nicely:

Date1    Title1
Description1

Date2    Title2
Description2

Date3    Title3
Description3

The rendered output is exactly what I want (and perfectly valid HTML)...but 
I can't help but get the feeling that I'm "cheating" by embedding my own 
partial tags--eg, my first <td> tag is a terminating </td>, knowing that the 
framework will already have generated a leading <td> by then, and I don't 
supply a terminating </td> either, knowing the framework will generate the 
final </td> tag...

As far as I understand them, the DetailsView and FormView controls offer 
more layout flexibility, but are are intended for displaying a single record 
at a time.

Is my approach a common and acceptable ASP.NET 2.0 practice?  If it is, then 
so be and I'm worrying about nothing because "it works" and the rendered 
code is clean...but as much as possible, I'd like to do things the way 
you're supposed to and not hack partial tags into .aspx files (not to 
mention that it'll probably trip the WYSIWYG editor sooner or later)...

I've seen more than a few references suggesting that the DataList has been 
mostly replaced by the GridView, but as far as I can tell, this isn't going 
to work in this case because I want the description to appear on its own row 
after the date and title fields (whereas the GridView is strictly 
line-oriented).

Thoughts?
Date:Tue, 31 Jul 2007 16:20:07 -0400   Author:  

Re: DataList--is it wrong to do this? If so, what's the correct way?   
Try using <asp:Repeater /> instead. The problem with making assumptions 
about the particular output of server controls is that the output could 
potentially change in a future version, breaking your code. For example, if 
Microsoft decided to use <ul /> to display menus instead of <table />. 
Microsoft? Please? While it is unlikely that the DataGrid output will ever 
change, I still think this applies as a bad practice.

Here is an example (not tested):

<table>
  <asp:Repeater ...>
    <ItemTemplate>
      <tr>
        <td class="clsDate">
          <%# Eval("MYDATE") %>
        </td>
        <td class="clsTitle">
          <%# Eval("MYTITLE") %>
        </td>
      </tr>
      <tr>
        <td class="clsDescription" colspan="2">
          <%# Eval("MYDESCRIPTION") %>
        </td>
      </tr>
    </ItemTemplate>
  </asp:Repeater>
</table>

This also allows you to assign classes at the <td /> level and avoid using 
redundant <div /> containers.


"Homer J. Simpson"  wrote in message 
news:eFE86A70HHA.3536@TK2MSFTNGP06.phx.gbl...

>I feel I'm not doing things correctly.
>
> I have a <asp:DataList> embedded in a <asp:Panel> with its ScrollBars 
> property set to Auto.  Essentially, I want to format a bunch of records as 
> a list in an area of the screen with a fixed size, so I want a scrollbar 
> to appear if I have a lot of records.  That works fine.
>
> Each row in my list consists of three fields that come from a database:  a 
> date, a title (both on the same line), and followed by a longer 
> description below that first line.  Knowing that the rendered HTML 
> contains leading table, tr and td tags, I've added my own tags right into 
> the <ItemTemplate>:
>
> <asp:DataList DataSourceID="..." >
> <ItemTemplate>
>        <div class="clsDate"><%# Eval("MYDATE") %></div></td>
>        <td><div class="clsTitle"><%# Eval( "MYTITLE") %></div></td>
>    </tr>
>    <tr>
>        <td colspan="2"><div class="clsDescription"><%# Eval( 
> "MYDESCRIPTION" ) %></div>
> </ItemTemplate>
> </asp:DataList>
>
> This lines up nicely:
>
> Date1    Title1
> Description1
>
> Date2    Title2
> Description2
>
> Date3    Title3
> Description3
>
> The rendered output is exactly what I want (and perfectly valid 
> HTML)...but I can't help but get the feeling that I'm "cheating" by 
> embedding my own partial tags--eg, my first <td> tag is a terminating 
> </td>, knowing that the framework will already have generated a leading 
> <td> by then, and I don't supply a terminating </td> either, knowing the 
> framework will generate the final </td> tag...
>
> As far as I understand them, the DetailsView and FormView controls offer 
> more layout flexibility, but are are intended for displaying a single 
> record at a time.
>
> Is my approach a common and acceptable ASP.NET 2.0 practice?  If it is, 
> then so be and I'm worrying about nothing because "it works" and the 
> rendered code is clean...but as much as possible, I'd like to do things 
> the way you're supposed to and not hack partial tags into .aspx files (not 
> to mention that it'll probably trip the WYSIWYG editor sooner or later)...
>
> I've seen more than a few references suggesting that the DataList has been 
> mostly replaced by the GridView, but as far as I can tell, this isn't 
> going to work in this case because I want the description to appear on its 
> own row after the date and title fields (whereas the GridView is strictly 
> line-oriented).
>
> Thoughts?
> 
Date:Tue, 31 Jul 2007 14:20:47 -0700   Author:  

Re: DataList--is it wrong to do this? If so, what's the correct way?   

> Try using <asp:Repeater /> instead. The problem with making assumptions 
> about the particular output of server controls is that the output could 
> potentially change in a future version, breaking your code. For example, 
> if Microsoft decided to use <ul /> to display menus instead of <table />. 
> Microsoft? Please? While it is unlikely that the DataGrid output will ever 
> change, I still think this applies as a bad practice.


This is *exactly* why I'm asking the question.  Using knowledge of what 
should be a black box to hack your way around always leads to problems in 
the long term.  Thanks for confirming this.


> Here is an example (not tested):
>
> <table>
>  <asp:Repeater ...>
>    <ItemTemplate>
>      <tr>
>        <td class="clsDate">
>          <%# Eval("MYDATE") %>
>        </td>
>        <td class="clsTitle">
>          <%# Eval("MYTITLE") %>
>        </td>
>      </tr>
>      <tr>
>        <td class="clsDescription" colspan="2">
>          <%# Eval("MYDESCRIPTION") %>
>        </td>
>      </tr>
>    </ItemTemplate>
>  </asp:Repeater>
> </table>
>
> This also allows you to assign classes at the <td /> level and avoid using 
> redundant <div /> containers.


Yeah, the only reason I was using divs was to add the ability to assign a 
class for custom formatting--obviously I couldn't assign one to the first 
<td> tag, since I'm not the one providing it.  As for the other cases 
(title, description), I only added the div (instead of using the enclosing 
td) for consistency.  That only increased my suspicion that I was going 
about it the wrong way.

<asp:Repeater> it is then--your example looks safe enough and very clean for 
my purposes.  I hadn't looked into it (yet) as most of the references I've 
been using are concentrating on the gridview (being new to 2.0).  I'm still 
at the stage where I'm discovering what's available and figuring out the 
best way to tackle common problems.
Date:Wed, 1 Aug 2007 11:41:19 -0400   Author:  

Google
 
Web dotnetnewsgroup.com


COPYRIGHT ?2005, EUROFRONT WORLDWIDE LTD., ALL RIGHT RESERVE  |   Contact us