در دیتالیست باید از TemplateField استفاده کنی و هر ردیف رو طبق اون چیزی که میخوای میچینی مثلا یه image برای عکس کاربر، یه lable برای نام کاربر و .... . دیتالسیت رو هم که پر میکنی از db .
بعد از اینکه آنلاین بودن کاربر رو تشخیص دادی با یه foreach همه ی کاربرانی که آنلاین هستن رو یه image خاص براشون لود میکنی. یعنی میگردی در همه سطرهای دیتالیست کنترل image رو پیدا میکنی و اگه مالک اون سطر ON بود image آنلاین بودن رو براش نشون میدی.
<asp:GridView ID="gView1" runat="server" GridLines="None" AllowPaging="true" PageSize="4" AutoGenerateColumns="false" Width="800px" OnPageIndexChanging="gView1_PageIndexChanging" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<table style="width:800px;margin:0px;" cellpadding=0 cellspacing=0>
<tr>
<td class="title" runat="server"><a name="<%#Eval("ID")%>"></a><%#Eval("Title1")%></td>
</tr>
<tr>
<td class="date" style="width:600px" runat="server"><asp:Label runat="server" ID="lbl_date" Text=<%#Eval("Date")%>></asp:Label></td>
</tr>
<tr><td class="height"></td></tr>
<tr>
<td class="body" runat="server"> <asp:Image CssClass="img" ID="img" runat="server" ImageUrl=<%#Eval("ImagePath")%> />
<%#Eval("Body")%></td>
</tr>
<tr><td class="_file" ><asp:HyperLink ID="lnk_fileDownload" runat="server" NavigateUrl=<%#Eval("filepath")%>></asp:HyperLink></td></tr>
<tr><td><hr style="width:100%" /></td></tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
البته این مال گرید هست ولی زیاد فرق نمیکنه تو دیتالیست فکرکنم ItemTemplate و Columns رو نخواد.
سمت سرور هم یه Select ساده داری و انتقال به یه دیتاست و نسبت دادن دیتاست به دیتالیست. کد foreach توی گرید یا دیتاست هم قبلا زیاد گفته شده.