2009-02-02 8 views
0

Je voudrais des suggestions sur la façon d'injecter un enregistrement dans ma DataList pour donner une option "Tous". Voici mon code, les données provenant de la base de données Northwind.Injecter l'enregistrement dans DataList

<asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1" 
     RepeatLayout="Flow" ShowFooter="False" ShowHeader="False" 
     RepeatDirection="Horizontal" 
     onitemcommand="DataList1_ItemCommand"> 
     <ItemStyle CssClass="datalist" /> 
    <ItemTemplate> 
     <%#(((DataListItem)Container).ItemIndex+1).ToString() %> 
     <asp:LinkButton ID="lbtnRegion" runat="server" 
      Text='<%# Eval("RegionDescription").ToString().Trim() %>' 
     CommandName='<%# DataBinder.Eval(Container.DataItem,"RegionID")%>' />      
    </ItemTemplate>  
    </asp:DataList> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
    SelectCommand="SELECT [RegionID], [RegionDescription] FROM [Region]" 
     ondatabinding="SqlDataSource1_Databinding" 
    onselected="SqlDataSource1_Selected"> 
</asp:SqlDataSource> 

J'utilise le bouton Link dans le Datalist pour filtrer les territoires et les afficher dans un GridView. Qu'est-ce que je voudrais faire est à certains dans le processus de liaison de données, ajouter un élément dans la liste des données qui agira comme l'option ALL, des suggestions seraient appréciées.

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e) 
{ 
    LinkButton lbtn; 

    foreach (DataListItem dli in DataList1.Items) 
    { 
     lbtn = (LinkButton)dli.FindControl("lbtnRegion"); 
     if (lbtn != null) 
      lbtn.ForeColor = System.Drawing.Color.White; 
    } 
    string command = e.CommandName; 
    lbtn = (LinkButton)e.Item.FindControl("lbtnRegion"); 
    if (lbtn != null) 
     lbtn.ForeColor = System.Drawing.Color.YellowGreen; 

    DataView dv = GetData(ref command); // Pass the RegionId 
    gvTerritory.DataSource = dv; 
    gvTerritory.DataBind(); 
} 

Merci

Répondre

0

Une façon est d'UNION ALL une valeur « Tous » à la requête de récupération de la liste déroulante articles.

SELECT 'All', 'All Regions' 
UNION ALL 
SELECT [RegionID], [RegionDescription] FROM [Region] 

Mais si vous avez beaucoup de listes (ou) dropdowns comme celui-ci, il est préférable pratique de créer un contrôle personnalisé qui injecte un « All » record pour vous.

+0

Grande suggestion, merci. – Picflight

0

Il a travaillé avec l'instruction SQL suivante:

SELECT '-1' AS 'RegionID', 'All Regions' AS 'RegionDescription' 
UNION ALL SELECT [RegionID], [RegionDescription] FROM [Region] 
0

cette occasion sur un menu déroulant, peut travailler même sur un datalist

Protected Sub ddlDataSources_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlDataSources.DataBound 
    ddlDataSources.Items.Insert(0, New ListItem("All Data Sources", 0)) 
    End Sub 
Questions connexes