2010-09-14 4 views
3

J'ai un problème commun dans un formulaire Web ASP.NET. Je suis juste surpris que je n'ai pas trouvé une solution commune :)Afficher une liste de résultats avec des nombres dans ASP.NET

J'ai une liste de résultats renvoyés à partir d'une base de données SQL Server. Je veux montrer ces résultats dans ma page Web avec le nombre à leur gauche. Par exemple, mon jeu de résultats peut ressembler à ce qui suit:

New York | NY 
Chicago | IL 
Los Angeles | CA 

Dans ma page web, je voudrais leur montrer que:

1. New York, NY 
2. Chicago, IL 
3. Los Angeles, CA 

J'ai été surpris que je ne peux pas trouver un moyen pour faire apparaître les chiffres automatiquement. Est-ce que je fais quelque chose de mal? Si non, quelle est l'approche recommandée?

Merci

Répondre

1

Puisque vous utilisez WebForms, pensez à utiliser la BulletedList control. Vous pouvez lier le contrôle BulletedList à un contrôle de source de données (comme les contrôles SqlDataSource ou LinqDataSource) ou vous pouvez remplir sa valeur par programmation via la propriété DataSource. Pour que BulletedList affiche des nombres, définissez la propriété BulletStyle sur Numbers.

Voici un exemple d'utilisation du BulletedList et un contrôle SqlDataSource: http://aspalliance.com/247_ASPNET_v20_Introducing_BulletedList_Control.4

1

Utilisez une liste ordonnée (<ol>) en HTML:

<ol> 
<% foreach(var item in theList) { %> 
    <li><%= item %></li> 
<% } %> 
</ol> 
2

HTML soutient directement ce que vous essayez de faire, vous ne avez pas besoin de ASP.NET fantaisie. Les balises HTML <ol> et <li> créent une liste ordonnée.

Si vous souhaitez utiliser un contrôle ASP.NET pour envelopper la liste ordonnée, vous pouvez utiliser le répéteur: http://msdn.microsoft.com/en-us/magazine/cc163780.aspx. Un exemple de l'utiliser pour cela est ici: http://www.jigar.net/howdoi/viewhtmlcontent194.aspx

Extrait de http://www.htmlcodetutorial.com/_OL.html:

<OL> 
<LI>Take 495 north 
<LI>Cross the 14th Street Bridge 
<LI>Take the Maine Avenue exit 
<LI>Turn left at the first light 
</OL> 
0

Utilisez un ol, li:

<ol> 
    <li>New York, NY</li> 
    <li>Chicago, IL</li> 
    <li>Los Angeles, CA</li> 
</ol> 
0

Comment allez-vous Boucler dans votre jeu de résultats?

Je pourrais me tromper mais je ferais cela avec une boucle for.

d'abord déclarer la liste à l'extrémité avant

<ol runat="server" id="orderedList"></ol> 

for(int i = 0; i < results.Length; i++) 
{ 
    orderedList.InnerHtml += "<li>" + results[i].ToString() + "</li>"; 
} 
1

Ceci est une tâche commune et doit être bien publié. Il est important de découpler votre contenu de votre présentation. Cela signifie que vos données doivent être divisées et séparées de manière à pouvoir être affichées par n'importe quel contrôle ou tag afin que vos données ne soient pas étroitement couplées à votre interface Web.

Pour cela, vous voulez convertir vos données en parties accessibles séparément afin que la liaison de données puisse les utiliser de manière illimitée. Vous pouvez effectuer de puissantes conversions de données à l'aide de projections dans LINQ. La méthode dépend du type de données que vous avez déjà.Je vais montrer deux façons.

Si vos données actuelles est juste un ensemble de chaînes, comme ceci:

 List<string> myData = new List<string>() 
     { 
      "New York | NY", 
      "Chicago | IL", 
      "Los Angeles | CA" 
     }; 

... alors vous pouvez simplement préfixe chaque chaîne avec le nombre et l'afficher comme il est affiché maintenant.

myData = myData.Select((s, i) => i.ToString() + ". " + s).ToList(); 

ficelles, cette méthode est facile, mais ne contrôle que vous laissez pas vraiment votre présentation des données, telles que la transformation de « 1 » à "(1)" ou "|" à ",".

Si, au contraire, vous avez une collection de, disons, la ville objets chacun avec un CityName et les propriétés CityAbbreviation ...

class City 
    { 
     public string CityName { get; set; } 
     public string CityAbbreviation { get; set; } 
    } 

... vous pouvez toujours utiliser une projection et reviendriez un objet anonyme avec deux propriétés. Le premier serait le numéro de ligne, et le second serait votre classe City. Cela vous donne la flexibilité de lier les données comme vous le souhaitez avec n'importe quel contrôle.

  // Create fake data. 
      List<City> myData = new List<City>() 
      { 
       new City(){ CityName = "New York", CityAbbreviation="NY" }, 
       new City(){ CityName = "Chicago", CityAbbreviation="IL" }, 
       new City(){ CityName = "Los Angeles", CityAbbreviation="CA" } 
      }; 

      // Project data... We create a new container object 
      // to hold each city in one property 
      // and a NUMBER in a second property. 
      var anonList = myData.Select((x, i) => new 
      { 
       Number = (i + 1).ToString(), 
       City = x 
      }).ToList(); 

      // Databind (Winforms example) 
      listBox1.Items.Clear(); 
      anonList.ForEach(
       c => 
       listBox1.Items.Add(
        c.Number + ". " + c.City.CityName + " , " + c.City.CityAbbreviation 
       ) 
      ); 

donc à utiliser cette deuxième méthode, il vous suffit d'avoir un ensemble de données qui ont déjà séparé les éléments de vos données (Ville, CityName). Si vous travaillez avec des chaînes, vous pouvez utiliser ce code pour les convertir dans la classe City que j'ai utilisée ci-dessus.

  // Create fake data. 
      List<string> myStringData = new List<string>() 
      { 
       "New York | NY", 
       "Chicago | IL", 
       "Los Angeles | CA" 
      }; 

      // Convert strings to City objects    
      List<City> myData = myStringData.Select(
       s => { 
        List<string> parts = s.Split('|').Select(s2 => s2.Trim()).ToList(); 
        return new City() 
         { CityName = parts[0], CityAbbreviation = parts[1] }; 
       }).ToList(); 
Questions connexes