mercoledì 27 maggio 2020

C# How to add an hour to a timespan

Il frammento di codice C# qui di seguito illustra una tecnica di come aggiungere due ore ad un oggetto di TimeSpan.


DateTime.Now.TimeOfDay.Add(TimeSpan.FromHours(2))

martedì 26 maggio 2020

Ado.Net Procedure or function 'Nomeprocedure' expects parameter '@Parametro', which was not supplied.

Quando si sta effettuando in Ado.Net una chiamata ad una stored procedure passando un valore null, si può verificare il messaggio di errore:

Procedure or function 'NomeStoredProcedure' expects parameter '@NomeParametro', which was not supplied.

Qui di seguito il codice C# per scatenare tale errore.

 command.Parameters.Add(new SqlParameter("@Parametro", VariabileConValoreNull));

L'oggetto Command è di tipo SqlCommand, al quale si passa un valore di tipo null.
Se invece si passa il valore dbnull la stored procedure viene eseguita correttamente, qui il frammento di codice.

 command.Parameters.Add(new SqlParameter("@Parametro", DBNull.Value));


lunedì 25 maggio 2020

Download ebook gratuito Azure Cognitive Services

Azure Cognitive Service Succinctly


Dal seguente sito https://www.syncfusion.com/ebooks/azure-cognitive-service-succinctly è possibile scaricare un ebook gratuito in lingua inglese e formato pdf, riguardante Azure.
Per il download è necessario avere un account gratuito al sito. Per maggiori informazioni e download visitate il sito indicato.

domenica 24 maggio 2020

Download ebook gratuiti di Mondadori

Da qualche mese la Mondadori ha messo on line la possibilità di scaricare gratuitamente alcuni libri.
Per scaricare o valutare i vari libri messi a disposizione vistate il seguente sito https://www.mondadoristore.it/eBook-italiani-gratis/gr-3046/

sabato 23 maggio 2020

Download gratuito Civilization VI




Un gioco molto bello e di strategia giunto ad una nuova versione quello proposto questa settimana da Epicgames.
Il gioco Civilization VI scaricabile gratuitamente  fino al 28 maggio 2020 senza limitazioni, è in lingua italiana per sistemi operativi Windows.
Per il download e maggiori informazioni visitate il seguente sito https://www.epicgames.com/store/it/product/sid-meiers-civilization-vi/home

venerdì 22 maggio 2020

Creazione di video giochi online GameFroot




GameFroot è una piattaforma online per la creazione di video giochi.
Il gioco è in lingua inglese ma che comprende una creazione guidata. Per maggiori informazioni visitate il seguente sito https://make.gamefroot.com/

giovedì 21 maggio 2020

Servizio online creare mappe con un cerchio indicante la misura




Un servizio gratuito ed online per indicare tramite un cerchio la distanza di un determinato punto in una mappa.
Un raggio che può essere impostato con un sistema di misurazione internazionale.
Il sito è visibile qui https://www.mapdevelopers.com/draw-circle-tool.php ed è in lingua inglese ma facilmente utilizzabile.

mercoledì 20 maggio 2020

Modelli di lettere

Oggi segnalo un sito molto interessante, quello dove reperire dei modelli di lettere da inviare alle istituzioni o per avviare qualche pratica.
Il sito https://modelliefacsimile.com/ offre un costante aggiornamento di documenti al quale fare riferimento.

martedì 19 maggio 2020

C# DataGridView rilevare l'evento quando si cambia la selezione della riga

Il frammento di codice qui di seguito, illustra una tecnica di come rilevare quando si cambia la selezione della riga nel controllo DataGridView, tramite l'evento SelectionChanged.

 private void DtgDati_SelectionChanged(object sender, EventArgs e)
        {

            if (((DataGridView)sender).SelectedRows.Count > 0)
            {
                lblId.Text = ((DataGridView)sender).SelectedRows[0].Cells[0].Value.ToString();
                TxtNome.Text = ((DataGridView)sender).SelectedRows[0].Cells[1].Value.ToString();
                TxtCognome.Text = ((DataGridView)sender).SelectedRows[0].Cells[2].Value.ToString();
            }
               
        }

lunedì 18 maggio 2020

Visual Studio 2010 Impossibile avviare il debug sul server Web. Impossibile avviare il debug ASP.NET. È possibile accedere a ulteriori informazioni avviando il progetto senza debug.




Quando sul proprio pc si ha installato vari ambienti di sviluppo tra cui anche Visual Studio 2010 e come sistema operativo Windows 10, può capitare che nel fare il debug del proprio progetto o quello passato da altri, generi un messaggio di errore Visual Studio
"Impossibile avviare il debug sul server Web. Impossibile avviare il debug ASP.NET. È possibile accedere a ulteriori informazioni avviando il progetto senza debug.".
Come anche riportato nella figura precedente.

Per risolvere questo problema, fate click con il tasto destro sul nome del progetto nella finestra "Esplora soluzioni" e nel menu selezionate la voce "Proprietà".
Nella linguetta selezioniamo la voce "web" e nella finestra che viene visualizzata selezioniamo la voce "Usa Visual Studio Development Server" come riportato nella figura qui di seguito.
A questo punto non ci saranno problemi e si potrà fare il debug della propria applicazione web.





domenica 17 maggio 2020

Portale sulla tecnologia .Net

Oggi segnalo un sito che tratta articoli sulla tecnologia .Net sia Windows Application e sia Web Application.
Il sito https://www.aspsnippets.com/ costantemente aggiornato è in lingua inglese con interessanti articoli.

sabato 16 maggio 2020

Download gratuito Grand Theft Auto V: Premium Edition




C'è tempo fino al 21 maggio 2020 per scaricare gratuitamente e senza limitazioni il gioco Grand Theft Auto V Premium Edition, per sistema operativo Windows.
Il gioco è per un pubblico adulto.
Per il download e maggiori informazioni visitate il seguente sito https://www.epicgames.com/store/it/product/grand-theft-auto-v/home

venerdì 15 maggio 2020

System.NotSupportedException: 'Unable to determine the provider name for provider factory of type 'System.Data.SQLite.SQLiteFactory'. Make sure that the ADO.NET provider is installed or registered in the application config.'

Quando si utilizza Entity Framework con il database SQlite può sollevarsi un eccezione di tipo
"System.NotSupportedException: 'Unable to determine the provider name for provider factory of type 'System.Data.SQLite.SQLiteFactory'. Make sure that the ADO.NET provider is installed or registered in the application config.'
"
Come mostrato in figura qui di seguito.





Questo è dovuto perchè nel file di configurazione della app.config non abbiamo messo gli opportuni tag di riferimento alle librerie.


Per risolvere questo problema, dobbiamo intervenire nel file app.config, in particolare “providers” dove andranno aggiunti altri tag e nella sezione “DbProviderFactories” .
Nel providers avremo un codice simile a questo:

<entityFramework>
    <providers>
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
    </providers>
  </entityFramework>

Che diventa

<entityFramework>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
      <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>

    </providers>
  </entityFramework>

Con l’aggiunta di due tag .
Mentre per “DbProviderFactories” avremo questo codice:


<system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite.EF6" />
      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
      <remove invariant="System.Data.SQLite" />
    </DbProviderFactories>
  </system.data>

Che diventa:

<system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite.EF6"/>
      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6"
        description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6"/>
      <remove invariant="System.Data.SQLite"/>
      <add name="SQLite Data Provider" invariant="System.Data.SQLite"
      description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"/>
    </DbProviderFactories>

  </system.data>


Con l’aggiunta di altri tag di tipo remove.


A questo punto non ci resta che eseguire il nostro applicativo.

giovedì 14 maggio 2020

Asp.Net MVC paginazione stile gridivew con VB.Net e C#

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_aspnet-mvc-paginazione-stile-gridivew-con-vbnet-e-c_1672.aspx




In questo articolo vedremo come realizzare una tabella (griglia )  con paginazione, il tutto in ambiente Web, utilizzando la tecnologia Asp.Net MVC con i linguaggi di programmazione Visual Basic Net e C#.
Per coloro che hanno sviluppato applicazioni con Asp.Net web form, si ricorderanno il controllo GridView, che tra le varie proprietà, eventi e funzionalità permetteva di gestire in vari scenari le griglia per la presentazione dei dati, tra cui la paginazione.
In Asp.Net MVC non ci sono controlli standard del framework per rappresentare i dati , ed in questo articolo vedremo come tramite il tag “Table” possiamo rendere la presentazione dei dati con paginazione.

Creazione base dati

Si crea una tabella con tre colonne, una denominata ID di tipo contatore, intero e chiave, una colonna denominata Nome di tipo Varchar da 50, una colonna denominata cognome di tipo varchar da 50.
A questo punto salviamo la tabella con il nome “Anagrafica” e valorizziamola con dei dati.
Creazione del progetto e stesura del codice
Terminata la creazione della base dati non ci resta che creare un progetto. Dopo aver aperto Microsoft Visual Studio community 2017 o versione successive, si crea un progetto di tipo web, con Asp.Net MVC con il linguaggio di proprio interesse. In questo articolo affronteremo i due linguaggi di programmazione più utilizzati, Visual Basic Net e C#,
Dopo aver creato il progetto web Asp.Net MVC, dobbiamo aggiungere al progetto la gestione dei dati che faremo tramite Entity Framework. Nella finestra di esplora soluzione, facciamo click con il tasto destro, nel menu che viene visualizzato selezioniamo la voce “Aggiungi” e nel sotto menu la voce “Nuovo elemento…”.
Nella finestra che viene visualizzata, sul menu di sinistra selezioniamo la voce “Dati” mentre nella parte centrale selezioniamo il modello denominato “Ado.Net Entity Data Model”, nella parte inferiore dove va inserito il nome scriviamo “ModelDati” e facciamo click sul pulsante “Aggiungi”.
Nella finestra successiva selezioniamo il progetto denominato “Entity Framework Designer da database” e poi click sul pulsante “Avanti” , nella finestra successiva, selezioniamo la connessione alla base dati, se non è presente se ne crea una nuova. A questo punto nella parte inferiore impostiamo un nome per l’entità per esempio “DatiEntities” e facciamo click sul pulsante “Avanti”. Fatto ciò nella finestra successiva selezioniamo la versione “6.0” di Entity Framework e facciamo click sul pulsante “Avanti” nella finestra successiva verrà visualizzata la tabella creata in precedenza, la selezioniamo ed impostiamo lo spazio dei nomi nella casella in basso con il valore “DatiModel” e facciamo click sul pulsante “Fine”.
A questo punto verrà visualizzata la finestra di Entity Framwork con la nostra tabella.
Ora dobbiamo creare una classe con la quale andremo a gestire l’entità relativa alla tabella Anagrafica, il numero di pagina corrente e le pagine totali.
La classe denominata “AnagraficaEstesa” avrà tre proprietà per le precedenti informazioni, questa classe andrà creata nella cartella “Model”.
Qui di seguito si riporta il codice delle classe per entrambi i linguaggi



VB.Net

Public Class AnagraficaEstesa

    Public Property Dati As List(Of Anagrafica)

    Public Property PaginaCorrente As Integer

    Public Property TotalePagina As Integer

End Class

 

C#

public class AnagraficaEstesa

    {

 

        public List<Anagrafica> Dati { get; set; }

 

        public  int PaginaCorrente { get; set; }

 

        public int TotalePagina { get; set; }

 

 

 

    }




Creata la classe per la gestione della paginazione, dobbiamo andare nella parte “Controllers” in particolare nel file “HomeController.cs” ed in particolare il codice per la pagina e visualizzazione.
Ora dovremmo scrivere il codice per la paginazione, in particolare, visualizzare due record per pagina (ma questo lo possiamo configurare noi) e che al click della pagina, visualizza i dati per quella pagina.
La funzione restituisce la classe estesa, dopo averla valorizzata con i dati e con la pagina totale e pagina da visualizzare.
Qui di seguito il frammento di codice per i linguaggi VB.Net e C#



VB.Net

Public Function GetDati(ByVal paginaCorrente As Integer) As AnagraficaEstesa

        Dim righePerPagina As Integer = 2

 

        Using entita As DatiEntities = New DatiEntities()

            Dim returnAnagrafica As AnagraficaEstesa = New AnagraficaEstesa()

            returnAnagrafica.Dati = (From dato In entita.Anagrafica Select dato).OrderBy(Function(campo) campo.ID).Skip((paginaCorrente - 1) * righePerPagina).Take(righePerPagina).ToList()

            Dim TotalePagine As Double = CDbl((CDec(entita.Anagrafica.Count()) / Convert.ToDecimal(righePerPagina)))

            returnAnagrafica.TotalePagina = CInt(Math.Ceiling(TotalePagine))

            returnAnagrafica.PaginaCorrente = paginaCorrente

            Return returnAnagrafica

        End Using

    End Function

 

C#

public AnagraficaEstesa GetDati (int paginaCorrente)

        {

            int righePerPagina = 2;

            using (DatiEntities entita = new DatiEntities ())

            {

                AnagraficaEstesa returnAnagrafica = new AnagraficaEstesa();

                returnAnagrafica.Dati = (from dato in entita.Anagrafica

                                         select dato)

                        .OrderBy(campo => campo.ID)

                        .Skip((paginaCorrente - 1) * righePerPagina)

                        .Take(righePerPagina).ToList();

 

 

                double TotalePagine = (double)((decimal)entita.Anagrafica.Count() / Convert.ToDecimal(righePerPagina));

                returnAnagrafica.TotalePagina = (int)Math.Ceiling(TotalePagine);

 

                returnAnagrafica.PaginaCorrente = paginaCorrente;

 

                return returnAnagrafica;

 

 

            }

 

 

        }

 

Il frammento di codice precedente, prende la serie dei dati relativa alla pagina che viene passata alla funzione, e ne estrapola solo due record impostate tramite la funzione righePerPagina.
Ora dovremmo creare due action denominate “Index” le quali sono richiamate dalla pagina “Index”
Queste due action richiameranno la funzione per il caricamento dei dati, passando la pagina.
Nella prima, quella iniziale, verrà passato un valore fisso pari a 1 che è la pagina, mentre l’altro action verrà richiamata dalla pagina index, dove nella view richiamerà la pagina al quale si è fatto click.
Si riporta il frammento di codice delle suddette operazioni.



VB.Net

Function Index() As ActionResult

 

        Return View(GetDati(1))

    End Function

    <HttpPost()>

    Function Index(paginaCorrente As Integer) As ActionResult

 

        Return View(GetDati(paginaCorrente))

    End Function

 

C#

 

     public ActionResult Index()

        {

            return View(GetDati(1));

        }

        [HttpPost]

        public ActionResult Index(int paginaCorrente)

        {

            return View(GetDati(paginaCorrente));

        }

 




Ora non ci resta che modificare la view, ossia la nostra pagina web “Index”, come model utilizzeremo la classe appena creata, quella estesa, e nella pagina tramite tabella visualizzeremo i dati.
Qui di seguito il codice relativo alla pagina view relativa ad Index per entrambi i linguaggi






VB.Net

@ModelType  ArtWebGridViewPaginazione.AnagraficaEstesa

@Code

    ViewData("Title") = "Home Page"

End Code

 

 

<html>

<head>

    <meta name="viewport" content="width=device-width" />

    <title>Index</title>

    <style type="text/css">

        body {

            font-family: Arial;

            font-size: 12pt;

        }

 

        table {

            border: 1px solid #ccc;

            border-collapse: collapse;

            background-color: #fff;

        }

 

            table th {

                background-color: #B8DBFD;

                color: #333;

                font-weight: bold;

                text-align: center;

            }

 

            table th, table td {

                padding: 5px;

                border: 1px solid #ccc;

            }

 

            table, table table td {

                border: 0px solid #ccc;

            }

    </style>

</head>

<body>

    <div>

 

        @Using (Html.BeginForm("Index", "Home", FormMethod.Post))

 

            @<h4>Anagrafica</h4>

            @<hr />

            @<table cellpadding="0" cellspacing="0">

                <tr>

                    <th>Id</th>

                    <th>Nome</th>

                    <th>Cognome</th>

 

                </tr>

                @For Each Elemento As Anagrafica In Model.Dati

                    @<tr>

                        <td>@Elemento.ID</td>

                        <td>@Elemento.Nome</td>

                        <td>@Elemento.Cognome</td>

                    </tr>

                Next

            </table>

            @<br />

            @<table cellpadding="0" cellspacing="0">

               

                <tr>

                    @For conta As Integer = 1 To Model.TotalePagina

                        @<td>

                            @If conta <> Model.PaginaCorrente Then

                                @<a href="javascript:PagerClick(@conta);">@conta</a>

                            Else

                                @<span>@conta</span>

                            End If

 

                        </td>

 

                    Next

                </tr>

               

            </table>

            @<input type="hidden" id="hfpaginaCorrente" name="paginaCorrente" />

        End Using

        <script type="text/javascript">

            function PagerClick(index) {

                document.getElementById("hfpaginaCorrente").value = index;

                document.forms[0].submit();

            }

        </script>

 

    </div>

</body>

</html>

 

 

C#

@model ArtWebGridViewPaginazioneCS.Models.AnagraficaEstesa

 

 

@{

    ViewBag.Title = "Home Page";

}

 

<html>

<head>

    <meta name="viewport" content="width=device-width" />

    <title>Index</title>

    <style type="text/css">

        body {

            font-family: Arial;

            font-size: 12pt;

        }

 

        table {

            border: 1px solid #ccc;

            border-collapse: collapse;

            background-color: #fff;

        }

 

            table th {

                background-color: #B8DBFD;

                color: #333;

                font-weight: bold;

                text-align:center;

            }

 

            table th, table td {

                padding: 5px;

                border: 1px solid #ccc;

            }

 

            table, table table td {

                border: 0px solid #ccc;

            }

    </style>

</head>

<body>

    <div>

        @using (Html.BeginForm("Index", "Home", FormMethod.Post))

        {

            <h4>Anagrafica</h4>

            <hr />

            <table cellpadding="0" cellspacing="0">

                <tr>

                    <th>Id</th>

                    <th>Nome</th>

                    <th>Cognome</th>

 

                </tr>

                @foreach (Anagrafica Elemento in Model.Dati)

                {

                    <tr>

                        <td>@Elemento.ID</td>

                        <td>@Elemento.Nome</td>

                        <td>@Elemento.Cognome</td>

 

                    </tr>

                }

            </table>

            <br />

            <table cellpadding="0" cellspacing="0">

                <tr>

                    @for (int conta = 1; conta <= Model.TotalePagina; conta++)

                    {

                        <td>

                            @if (conta != Model.PaginaCorrente)

                            {

                                <a href="javascript:PagerClick(@conta);">@conta</a>

                            }

                            else

                            {

                                <span>@conta</span>

                            }

                        </td>

                    }

                </tr>

            </table>

            <input type="hidden" id="hfpaginaCorrente" name="paginaCorrente" />

 

            <script type="text/javascript">

                function PagerClick(index) {

                    document.getElementById("hfpaginaCorrente").value = index;

                    document.forms[0].submit();

                }

            </script>

        }

    </div>

</body>

</html>

 


Conclusioni

L’articolo ha fornito una tecnica di paginazione dei dati tramite l’utilizzo di Linq To Entity Framework, ed il codice html di una tabella.
Nelle webform il controllo GridView forniva allo sviluppatore la paginazione permettendo in questo modo di fornire la gestione dei dati in maniera semplificazione, con Asp.Net MVC non si hanno più i controlli, ma lavorando bene sul codice Html e sul codice, si riescono ad ottenere gli stessi risultati.