Sulla Programmazione

Quattro chiacchere sulla programmazione e sulle bit-tecnologie con Fabrizio Cipriani

tag: ASP.NET

Indice di un elemento in una query LINQ

Mettiamo che abbia bisogno di usare l'indice dell'elemento corrente di una query LINQ.

Ad esempio, partendo dalla lista:

String[] pezzi = {"pedone", "torre", "cavallo", "alfiere"};

voglio ottenere una unica stringa che contiene:

Pezzo numero 1:pedone, Pezzo numero 2: torre, etc.

Il metodo Select ha un overload con il parametro "index" che può essere utilizzato per conoscere l'indice dell'elemento corrente. In altre parole è possibile fare:

pezzi.Select((item, index) => "Pezzo numero " + index.ToString() + ": " + item)

Per ottenere esattamente l'output desiderato possiamo usare il metodo Join() della classe String:

Console.WriteLine(
    String.Join(", ", 
        pezzi.Select((item, index ...

Visual Studio 2008 - errore System Runtime InteropServices COMException durante il caricamento di un progetto ASP.NET con Vista/Windows 7

L'errore completo è:

“System.Runtime.InteropServices.COMException”

A giudicare da una veloce ricerca su Google, questo sembra essere un problema piuttosto comune sugli ultimi sistemi operativi Microsoft. L'articolo con la soluzione più completa l'ho trovata sul blog di Hanan Schwartzberg:

Lions Den

Il problema è che il progetto web che si sta caricando contiene una virtual directory che non esiste. Oppure, se esiste, Visual Studio non ha sufficienti diritti per verificarne l'esistenza, o non sono installate le API necessarie.

Per risolvere il problema occorre eseguire questi passi:

  • Eseguire Microsoft Visual Studio 2008 come amministratore
  • Aprire il ...

Accesso ad una proprietà di un dataitem parent all'interno di controlli databound annidati

Mettiamo di avere due controlli databound annidati come in questo esempio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<asp:Repeater Id="rptOuter" runat="server">
  <ItemTemplate>
      <asp:Repeater Id="rptInner" runat="server">
        <ItemTemplate>
          <tr>
            <td><%# Container.DataItem %></td>
          </tr>
        </ItemTemplate>
      </asp:Repeater>
  </ItemTemplate>
</asp:Repeater>

E una lista costruita in questo modo:

1
2
3
4
5
6
7
public class TestOuter
{
    public String Prefix { get; set; };
    List<String> TestInner { get; set; };
}

List<TestOuter> listDataSource = CostruisciListaTestOuter()

Se vogliamo visualizzare gerarchicamente il contenuto della lista listDataSource nel Repeater esterno rptOuter, e per ogni suo elemento la lista TestInner ...