2011-12-31 3 views
2

Je remplis un DataTable à l'aide d'ADO.NET et je lie une DataList et cela fonctionne. Mais lorsque je tente d'extraire seulement 10 enregistrements à l'aide de Linq DataTable comme indiqué ci-dessous, mon code donne une erreur:Opération Linq avec datable

var xx=dt.asEnumerable().take(10).tolist(); 
dglist.datasource=xx; 
dglist.databind(); 

<asp:DataList ID="dglist" runat="server" 
    RepeatColumns="4" RepeatDirection="Horizontal" 
    RepeatLayout="Table" CellPadding="1"> 
    <ItemTemplate> 
     <div> 
      <asp:Image runat="server" id="Image1" 
       src='<%# Eval("photos") %>' BorderWidth="0" 
       alt="" style="width:300px;height:300px;display:block;"/> 
     </div> 
    </ItemTemplate> 
</asp:DataList> 

Mon DataTable a une colonne appelée « photos ». Je reçois une erreur lorsque je me lie à un DataList. Veuillez me guider sur la façon dont je peux utiliser Linq pour extraire 10 enregistrements de DataTable et lier DataList avec 10 enregistrements.

J'ai une autre question.

Que signifie datatable.asEnumerable() et que fait-il? Il semble convertir un DataTable par asEnumerable() mais à quoi?

+0

En ce qui concerne votre dernière question, il convertit la base de données à une collection (à savoir IEnumerable ) – BlackBear

+1

Quelle est l'exception ou le message que vous avez obtenu? –

+0

aucune colonne trouvée appelée "photo" –

Répondre

1

Le DataTable implémente l'interface IListSource qui permet de prendre en charge la liaison de données avec les noms de colonne (donc Eval("photos") fonctionne). Mais quand vous appelez AsEnumerable() sur le DataTable il renverra un IEnumerable<DataRow> où les objets DataRow n'auront pas la propriété nommée photos c'est pourquoi vous obtenez l'exception. Mais vous pouvez le faire fonctionner si vous utilisez un indexeur dans votre eval avec le nom de la colonne:

var xx = dt.AsEnumerable().Take(10).ToList(); 
dglist.DataSource = xx; 
dglist.DataBind(); 

<asp:DataList ID="dglist" runat="server" 
    ... 
      <asp:Image runat="server" id="Image1" 
       src='<%# Eval("[photos]") %>' BorderWidth="0" 
       alt="" style="width:300px;height:300px;display:block;"/> 
    ... 
</asp:DataList> 

Ou vous utilisez la méthode d'extension AsDataView(). Le OfType<object>() est requis pour rendre la collection non générique à une collection générique pour prendre en charge LINQ. Dans ce cas, vous n'avez pas besoin d'utiliser un indexeur dans votre méthode Eval:

var xx = dt.AsDataView().OfType<object>().Take(10).ToList(); 
dglist.DataSource = xx; 
dglist.DataBind(); 

<asp:DataList ID="dglist" runat="server" 
    .... 
      <asp:Image runat="server" id="Image1" 
       src='<%# Eval("photos") %>' BorderWidth="0" 
       alt="" style="width:300px;height:300px;display:block;"/> 
    .... 
</asp:DataList> 
+0

merci, je vais essayer de revenir à vous. bonne année. –

Questions connexes