mercoledì 17 dicembre 2008
aggiungere una ButtonColumn al controllo Xceed Datagrid WPF
xcdg:Column FieldName="FieldName" Title="Elimina Riga" ReadOnly="False"
xcdg:Column.CellContentTemplate
DataTemplate
Button Content="Elimina" Click="btnEliminaRiga_Click"
/Button
/DataTemplate
/xcdg:Column.CellContentTemplate
/xcdg:Column
Non è possibile non inserire il FieldName della colonna.
mercoledì 5 novembre 2008
IIS7 e Skype
Il motivo è che entrambi tentano di utilizzare la porta 80 della macchina.
Per risolvere il problema è sufficiente disattivare l'utilizzo di tale porta in Skype in Opzioni Avanzate Connessione, spuntando il flag "Usa le porte 80 e 443 come alternative per le connessioni in ingresso".
mercoledì 29 ottobre 2008
Utente SuperAdmin in Vista
Infatti è possibile attivare un utente SuperAdministrator per svolgere particolari operazioni.
Per attivarlo da Menù Start/Accessori cliccare con il tasto destro su Prompt dei Comandi e selezionare Esegui come Amministratore. Si aprirà il promt dei comandi, digitare:
net user administrator /active:yes
e riavviare.
all'avvio di windows troveremo anche l'utente Administrator con il quale è possibile svolgere anche le più particolari funzioni.
Per disattivare l'utente digitare dal prompt dei Comandi:
net user administrator /active:no
venerdì 17 ottobre 2008
Proprietà della Classe Win32_Printer
Win32_Printer.Attributes
Win32_Printer.Availability
Win32_Printer.AvailableJobSheets
Win32_Printer.AveragePagesPerMinute
Win32_Printer.Capabilities
Win32_Printer.CapabilityDescriptions
Win32_Printer.Caption
Win32_Printer.CharSetsSupported
Win32_Printer.Comment
Win32_Printer.ConfigManagerErrorCode
Win32_Printer.ConfigManagerUserConfig
Win32_Printer.CreationClassName
Win32_Printer.CurrentCapabilities
Win32_Printer.CurrentCharSet
Win32_Printer.CurrentLanguage
Win32_Printer.CurrentMimeType
Win32_Printer.CurrentNaturalLanguage
Win32_Printer.CurrentPaperType
Win32_Printer.Default
Win32_Printer.DefaultCapabilities
Win32_Printer.DefaultCopies
Win32_Printer.DefaultLanguage
Win32_Printer.DefaultMimeType
Win32_Printer.DefaultNumberUp
Win32_Printer.DefaultPaperType
Win32_Printer.DefaultPriority
Win32_Printer.Description
Win32_Printer.DetectedErrorState
Win32_Printer.DeviceID
Win32_Printer.Direct
Win32_Printer.DoCompleteFirst
Win32_Printer.DriverName
Win32_Printer.EnableBIDI
Win32_Printer.EnableDevQueryPrint
Win32_Printer.ErrorCleared
Win32_Printer.ErrorDescription
Win32_Printer.ErrorInformation
Win32_Printer.ExtendedDetectedErrorState
Win32_Printer.ExtendedPrinterStatus
Win32_Printer.Hidden
Win32_Printer.HorizontalResolution
Win32_Printer.InstallDate
Win32_Printer.JobCountSinceLastReset
Win32_Printer.KeepPrintedJobs
Win32_Printer.LanguagesSupported
Win32_Printer.LastErrorCode
Win32_Printer.Local
Win32_Printer.Location
Win32_Printer.MarkingTechnology
Win32_Printer.MaxCopies
Win32_Printer.MaxNumberUp
Win32_Printer.MaxSizeSupported
Win32_Printer.MimeTypesSupported
Win32_Printer.Name
Win32_Printer.NaturalLanguagesSupported
Win32_Printer.Network
Win32_Printer.PaperSizesSupported
Win32_Printer.PaperTypesAvailable
Win32_Printer.Parameters
Win32_Printer.PNPDeviceID
Win32_Printer.PortName
Win32_Printer.PowerManagementCapabilities
Win32_Printer.PowerManagementSupported
Win32_Printer.PrinterPaperNames
Win32_Printer.PrinterState
Win32_Printer.PrinterStatus
Win32_Printer.PrintJobDataType
Win32_Printer.PrintProcessor
Win32_Printer.Priority
Win32_Printer.Published
Win32_Printer.Queued
Win32_Printer.RawOnly
Win32_Printer.SeparatorFile
Win32_Printer.ServerName
Win32_Printer.Shared
Win32_Printer.ShareName
Win32_Printer.SpoolEnabled
Win32_Printer.StartTime
Win32_Printer.Status
Win32_Printer.StatusInfo
Win32_Printer.SystemCreationClassName
Win32_Printer.SystemName
Win32_Printer.TimeOfLastReset
Win32_Printer.UntilTime
Win32_Printer.VerticalResolution
Win32_Printer.WorkOffline
mercoledì 15 ottobre 2008
Progetto d'installazione
Da Interfaccia Utente del Setup sotto Avvio cliccare su Aggiungi Finestra di Dialogo.
Scegliere il layout desiderato e porre attenzione alla casella delle proprietà.
Per un layout di tipo Caselle di testo, modificare EditLabel (il nome visualizzato per la label) e EditProperty (il nome della proprietà associata a quel campo)
per poter gestire i dati inseriti, ad esempio nell' overrides Install del ProjectInstaller è necessario impostare il CustomActionData. Questo lo troviamo in Azioni Personalizzate del Setup sotto Installa è stato precedentemente aggiunto l'Output Primario che tra le proprietà ha anche il CustomActionData. Per poter effettuare il mapping e necessario aggiungere tutti le \chiavi =valore aggiunte nelle nostre form personalizzate.
ad esempio.
se nella form è stato aggiunto Edit1Property = USER allora nella CustomActionData inserire /USER=[USER] se fossero più d'uno basta aggiungerli separati da spazi (/USER=[USER] /PSW=[PSW])
Per recuperare i valori dal ProjectInstaller inserire
Context.Parameters("USER")
lunedì 13 ottobre 2008
Ancora sui servizi
Fondamentale: l'Username deve essere del tipo: NomeServer\Username o Dominio\Username
Per avviare il servizio al termine dell'installazione gestire la AfterInstall della ProjectInstaller (da CodeBehind)
Private Sub ProjectInstaller_AfterInstall(ByVal sender As Object, ByVal e As System.Configuration.Install.InstallEventArgs) Handles Me.AfterInstall
Dim timeout As TimeSpan = TimeSpan.FromSeconds(30)
Dim s As New ServiceProcess.ServiceController("MegaPrintServer")
s.Start()
s.WaitForStatus(ServiceProcess.ServiceControllerStatus.Running, timeout)
End Sub
mercoledì 24 settembre 2008
Creare un servizio Windows con C#
L'applicazione da trasformare in servizio, si occupa di controllare una casella email per la ricezione di richieste d'intervento che vengono poi filtrate in base al mittente ed inserite nel database del sistema gestionale per poi essere visualizzate poi tramite interfaccia web.Inizialmente l'applicazione veniva avviata automaticamente al login di un utente ed eseguita in background. Naturale evoluzione e' quindi quella di trasformarla in servizio in modo che possa venir avviata anche senza effettuare il login di un utente.
Per fare cio, occorre selezionare il template "Windows Service"
public partial class service1 : ServiceBase
{
public service1()
{
// Costruttore.
}
protected override void OnStart(string[] args)
{
// Codice eseguito all'avvio del servizio.
}
protected override void OnStop()
{
// Codice eseguito al termine del servizio.
}
}
Il metodo OnStart verra' chiamato ogni volta che il servizio verra' avviato (Manualmente o Automaticamente a seconda di come e' stato impostato), tramite il parametro args recuperiamo i parametri che decidiamo di passargli al momento dell'avvio (Nella finestra di configurazione dei servizi e' possibile impostare i parametri di avvio). Ad esempio nel metodo OnStart possiamo attivare un Timer per l'esecuzione del nostro codice.
Ora dobbiamo aggiungere l'installer che si occupa di installare l'applicazione come servizio. Per fare cio' dobbiamo andare in modalita' Design sulla classe che contiene il servizio, nel nostro caso service1, tasto destro e poi Add Installer
Tramite l'installer possiamo definire nelle sue proprieta' le credenziali con cui dovra' partire il servizio: in particolar modo il tipo di account (LocalSystem)
Possiamo ora aggiungere un progetto per il setup alla nostra soluzione. Andiamo quindi su File -> Add -> New Project... e selezioniamo "Setup and Deployment" -> "Setup Project" Ora dobbiamo specificare quali file devono essere aggiunti al setup e dove andranno messi (di default) sul computer dove girera' la nostra applicazione. Clichiamo con il tasto destro su Application Folder e poi selezioniamo Add -> Project Output...:
Da questa finestra selezioniamo l'output del nostro progetto, in questo modo quando effettueremo il build della soluzione, l'eseguibile della nostra applicazione verra' inserito all'interno del setup.
Ora associamo il progetto di setup al progetto della nostra applicazione. Per fare questo dobbiamo cliccare su Setup nella finestra Solution Explorer: sulla barra di tale finestra compariranno delle nuove icone, clicchiamo su Custom Actions Editor.
Aperta la finestra di dialogo relativa a Custom Actions Editor dobbiamo cliccare su Application Folder e successivamente selezionare Primary output from [Your service] (Active)Fatto questo siamo pronti per compilare ed installare il servizio.
mercoledì 3 settembre 2008
Caricare un'immagine e modificarla
Un metodo potrebbe essere quello di caricare l'immagine e postporre un parametro casuale, in modo da far ricaricare ogni volta l'immagine.
Ad esempio:
Image1.ImageUrl = "~/img/immagine.jpg?t=" + DateTime.Now.Ticks.ToString
in Questo modo l'immagine viene ricaricata ogni volta... comprese le modifiche ;)
Il DefaultButton, una questione importante
Infatti se non viene impostato per default al click dell'invio viene attivato il primo bottone trovato nella pagina.
Il metodo che ho utilizzato per ovviare a questo problema è questo:
inserire dei Panel, e nella dichiarazione utilizzare il
defaultbutton="idButtonDesiderato"
in questo modo gestisco in maniera granulare il bottone di default.
martedì 26 agosto 2008
WebPart e IIS
In questo modo, sulla prima pagina del sito dobbiamo gestire l’utente da caricare nei cookie.
Ad Esempio
Dim userData As String = "ApplicationSpecific data for this user."
Dim ticket As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, _
"username", _
DateTime.Now, _
DateTime.Now.AddMinutes(30), _
True, _
userData, _
FormsAuthentication.FormsCookiePath)
' Encrypt the ticket.
Dim encTicket As String = FormsAuthentication.Encrypt(ticket)
' Create the cookie.
Response.Cookies.Add(New HttpCookie(FormsAuthentication.FormsCookieName, encTicket))
L’IIS 7 deve essere impostato in modo da avere abilitate:
Autenticazione Anonima: Abilitato
Autenticazione basata su Form: Abilitato
Autenticazione di base: Disabilitato
Rappresentazione ASP.NET: Abilitato
L’IIS 5 deve essere impostato in modo da avere abilitate:
Accesso Anonimo: abilitato, il nome utente (ad esempio): IUSR_ServerTest e password quella di default, comunque quelli di default entrambi.
Autenticazione di Base: Disabilitato
Autenticazione Integrata di Windows: Abilitato
Paging e Sorting di un GridView
Con questi metodi è possibile gestire il paging e il sorting di un GridView non collegato ad un DataSource.
Private Property GridViewSortDirection() As String
Get
Return IIf(ViewState("SortDirection") = Nothing, "ASC", ViewState("SortDirection"))
End Get
Set(ByVal value As String)
ViewState("SortDirection") = value
End Set
End Property
Private Property GridViewSortExpression() As String
Get
Return IIf(ViewState("SortExpression") = Nothing, String.Empty, ViewState("SortExpression"))
End Get
Set(ByVal value As String)
ViewState("SortExpression") = value
End Set
End Property
Private Function GetSortDirection() As String
Select Case GridViewSortDirection
Case "ASC"
GridViewSortDirection = "DESC"
Case "DESC"
GridViewSortDirection = "ASC"
End Select
Return GridViewSortDirection
End Function
Protected Function SortDataTable(ByVal dataTable As DataTable, ByVal isPageIndexChanging As Boolean) As DataView
If Not dataTable Is Nothing Then
Dim dataView As New DataView(dataTable)
If GridViewSortExpression <> String.Empty Then
If isPageIndexChanging Then
dataView.Sort = String.Format("{0} {1}", GridViewSortExpression, GridViewSortDirection)
Else
dataView.Sort = String.Format("{0} {1}", GridViewSortExpression, GetSortDirection())
End If
End If
Return dataView
Else
Return New DataView()
End If
End Function
Nell'evento Paging viene passato al SortDataTable il datasource della griglia, che molto probabilmente sarà vuoto. E' conveniente salvare precedentemente il datasource nel viewState e poi passare tale campo al SortDataTable
Protected Sub gridAgenti_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gridAgenti.PageIndexChanging
Try
gridAgenti.DataSource = SortDataTable(gridAgenti.DataSource, True)
gridAgenti.PageIndex = e.NewPageIndex
gridAgenti.DataBind()
Catch ex As Exception
Session.Remove("Exception")
Session.Add("Exception", ex)
Response.Redirect("ErrorPage.aspx")
End Try
End Sub
Protected Sub gridAgenti_Sorting(ByVal sender As Object, ByVal e As GridViewSortEventArgs) Handles gridAgenti.Sorting
GridViewSortExpression = e.SortExpression
Dim pageIndex As Integer = gridAgenti.PageIndex
gridAgenti.DataSource = SortDataTable(gridAgenti.DataSource, False)
gridAgenti.DataBind()
gridAgenti.PageIndex = pageIndex
End Sub