Visualizzazione post con etichetta ESEMPI DI CODICE VB. Mostra tutti i post
Visualizzazione post con etichetta ESEMPI DI CODICE VB. Mostra tutti i post

23/04/12

Checkbox su datagridview

A volte capita di voler mostrare una colonna di una datagridview come checkbox.

Se il campo del database è booleano, il controllo capisce automaticamente che deve mettere la checkbox.

In alcuni scenari, capita che abbiamo una griglia con dei dati presi da una tabella o da una vista, e vogliamo aggiungerci una colonna per mettere ad esempio un segno di spunta sui record da spostare, eliminare.

Supponiamo di avere un elenco di record nella tabella messaggi

La query per caricare il datasource della datagridview è

select * from messaggi

Per creare una colonna aggiuntiva, magari all’inizio che venga mostrata come una checkbox ad esempio per eliminare i messaggi, basta trasformare la query precedente nella seguente:

select cast(0 as bit) as Elimina,* from messaggi

E come prima colonna della datagridview comprarirà una colonna checkbox, una checkboxcolumn.

21/04/12

Come creare una datagridview con una lista o un elenco di link che aprono allegati

A volte può nascere la necessità su un form VB.NET di avere un elenco di files allegati come dettaglio della scheda o del record corrente rappresentati sotto forma di elenco in una griglia.

imageA tal fine useremo un controllo datagridview nel quale caricheremo i nostri link con due campi da creare nella tabella allegati: uno col nome del file da visualizzare e l’altro col percorso fisico da lanciare.

 

Il codice per caricare le righe nella griglia (come mostrato in figura) mostrando celle linkabili ai file è il seguente:

15/04/12

Esempio di codice VB per controllo codice fiscale

A volte capita di dover controllare un codice fiscale se esista o meno. Vi rimettiamo questa comoda funzione, che resituisce zero se il codice fiscale passato è valido.

Public Function CheckCodiceFiscale(ByVal sz_Codice As String) As Integer
     '======================================
    'Controllo il codice fiscale
    '======================================
    Const ALF1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Const CIF1 = "0123456789"
    Const ALF2 = "BAKPLCQDREVOSFTGUHMINJWZYX"
    Const CIF2 = "10   2 3 4   5 6 7 8 9    "
    Dim c_Char As String * 1
    Dim c_Code As String * 1
    Dim n_Count As Integer
    Dim lcv As Integer
    '----- Start
    sz_Codice = Left(UCase(sz_Codice) + space(16), 16)
    For lcv = 2 To 14 Step 2
        c_Char = Mid$(sz_Codice, lcv, 1)
        Select Case c_Char
            Case "0" To "9"
                n_Count = n_Count + InStr(CIF1, c_Char)
            Case "A" To "Z"
                n_Count = n_Count + InStr(ALF1, c_Char)
        End Select
    Next lcv
    For lcv = 1 To 15 Step 2
        c_Char = Mid$(sz_Codice, lcv, 1)
        Select Case c_Char
            Case "0" To "9"
                n_Count = n_Count + InStr(CIF2, c_Char)
            Case "A" To "Z"
                n_Count = n_Count + InStr(ALF2$, c_Char)
        End Select
    Next lcv
    n_Count = 1 + ((n_Count - 15) Mod 26) + 64
    c_Code = Chr$(n_Count)
    c_Char = Mid$(sz_Codice, 16, 1)
    If c_Code = c_Char Then
        CheckCodiceFiscale = 0
    Else
        CheckCodiceFiscale = n_Count
    End If
End Function

14/04/12

Esempio di codice VB controlla partita IVA

Vi rimettiamo una semplice funzione per controllare una partita iva (passata come stringa) se è valida. In caso di esito positivo la funzione restituisce zero.

Public Function CheckPartitaIva(ByVal sz_Codice As String) As Integer
    '======================================
    'Controllo la partita iva
    '======================================
    Dim n_Val As Integer
    Dim n_Som1 As Integer
    Dim n_Som2 As Integer
    Dim lcv As Integer
   
   
    If sz_Codice = "" Then CheckPartitaIva = -1: Exit Function
   
    'Gestione prefisso nazionale sulla partita IVA
   
    If Not IsNumeric(Mid(Trim(sz_Codice), 1, 2)) Then
        sz_Codice = Mid(Trim(sz_Codice), 3, Len(sz_Codice))
    ElseIf Not IsNumeric(Mid(Trim(sz_Codice), 1, 3)) Then
        sz_Codice = Mid(Trim(sz_Codice), 4, Len(sz_Codice))
    End If
   
   
    For lcv = 1 To 9 Step 2
        n_Val = Val(Mid$(sz_Codice, lcv, 1))
        n_Som1 = n_Som1 + n_Val
        n_Val = Val(Mid$(sz_Codice, lcv + 1, 1))
        n_Som1 = n_Som1 + Int((n_Val * 2) / 10) + ((n_Val * 2) Mod 10)
    Next lcv
    n_Som2 = 10 - (n_Som1 Mod 10)
    If n_Som2 = 10 Then n_Som2 = 0
    n_Val = Val(Mid$(sz_Codice, 11, 1))
    If n_Som2 = n_Val Then
        CheckPartitaIva = 0
    Else
        CheckPartitaIva = n_Som2 + 48
    End If
End Function

12/04/12

Come arrotondare all’intero successivo in vb

Vi sarà capitato, dato un numero, di arrotondarlo all’intero successivo se il valore passato alla funzione è decimale e non arrotondarlo se è già intero.

A tale scopo vi forniamo una comoda funzione utile allo scopo:

Function InteroSuccessivo(numero As Single) As Integer

 InteroSuccessivo = IIf(Int(numero + 1) – numero = 1, numero, Int(numero + 1))
 
End Function

Dove numero è il numero decimale che viene passato. Se il numero +1 sottratto se stesso è 1 vuol dire che è già intero e non facciamo nulla, altrimenti utilizziamo la funzione int che arrotonda per difetto e gli aggiungiamo uno.

Problema checkstate Indeterminate in Vb.net

Quando in vb.net facciamo il databinding di una checkbox, uno dei problemi più noiosi che ci troviamo ad affrontare è i lfatto che anche se il valore del campo è null il controllo si posiziona sempre nello stato indeterminate e quindi con la casellina della check box piena.
Se vogliamo che una checkbox lavori solo con checkstate checked ed unckecked basta unsemplice trucchetto.
Bisogna gestire l’evento checkstatechanged della nostra checkbox, chiamiamola ad esempio checkbox 1. Esso viene lanciato appena avviene il binding del controllo.
Scrivendo questo codice nell’evento
Private Sub CheckBox1_CheckStateChanged(sender As Object, e As System.EventArgs) Handles CheckBox1.CheckStateChanged
      
If CheckBox1.CheckState = CheckState.Indeterminate Then CheckBox1.CheckState = CheckState.Unchecked
   End Sub

Il problema è risolto Sorriso

04/04/12

Riempire un datatable con una query SQL

Stamattina vi regalo una comodissima funzione chiamata FillDatatable, che utilizzeremo per riempire un datatable partendo da una semplice query sql.
In pratica basta passare come parametri di input alla funzione la query che desideriamo lanciare (ovviamente una istruzione select) e la stringa di connessione che desideriamo utilizzare. L’ultimo parametro opzionale SqlServer indica se stiamo lavorando con Sql o con un database con connessione Ole Db come può essere ad esempio un database Access.
Se avete dei dubbi sulla costruzione della stringa di connessione vi rimando a questo fantastico sito sulle stringhe di connessione.

Public Shared Function FillDatatable(ByVal Query As String, ByVal StringaConnessione As String, Optional SqlServer as boolean=True) As DataTable
       If SqlServer Then
           Dim cnDb As New SqlClient.SqlConnection(StringaConnessione)
           Dim cmdOggetti As New  _
               SqlClient.SqlCommand(Query, cnDb)
           Dim daGetOggetti As New SqlClient.SqlDataAdapter(cmdOggetti)
           Dim dsOggetti As New DataSet()
           daGetOggetti.Fill(dsOggetti, Query)
           FillDatatable = dsOggetti.Tables(0)
           cnDb.Close()
       Else
           Dim cnDb As New OleDb.OleDbConnection(StringaConnessione)
           Dim cmdOggetti As New  _
               OleDb.OleDbCommand(Query, cnDb)
           Dim daGetOggetti As New OleDb.OleDbDataAdapter(cmdOggetti)
           Dim dsOggetti As New DataSet()
           daGetOggetti.Fill(dsOggetti, Query)
           FillDatatable = dsOggetti.Tables(0)
           cnDb.Close()
       End If

   End Function

02/04/12

Cambiare dinamicamente il colore di una riga di una Datagridview in base al valore di una cella

A volte nella gestione di una datagridview si ha la necessità di cambiare il colore di una datagridview in base ad un valore di una cella.
Es. se una colonna contiene il valore “1” colora la riga di rosso.
Questa cosa viene gestita nell’evento CellValueChanged della griglia se vogliamo che il cambiamento avvenga a seguito di una modifica manuale di un valore.
Ecco un semplice esempio di codice:

Private Sub myDataGridView_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs)
Dim colIndex As Integer = e.ColumnIndex


Dim rowIndex As Integer = e.RowIndex


If rowIndex >= 0 And colIndex >= 0 Then


Dim theRow As DataGridViewRow = dataGridView1.Rows(rowIndex)


If theRow.Cells(colIndex).Value.ToString() = "1" Then


theRow.DefaultCellStyle.BackColor = Color.Red


End If


End If


End Sub


Se invece vogliamo gestire le righe della datagridview di colore di verso al momento del binding, ossia della associazione della griglia al datatable dobbiamo gestire l’evento cellformatting.
Ecco un esempio di codice da inserire nell’evento CellFormatting. Se la colonna numero vale zero la riga si colorerà di rosso altrimenti di bianco.



Dim rowIndex As Integer = e.RowIndex

If rowIndex >= 0 Then

Dim theRow As DataGridViewRow = DataGridView1.Rows(rowIndex)

If theRow.Cells("NUMERO").Value.ToString() = "0" Then

theRow.DefaultCellStyle.BackColor = Color.Red
Else
theRow.DefaultCellStyle.BackColor = Color.White

End If

End If

17/01/08

Funzione per riempire una treeview da un dataset

Dim DSNWind As DataSet

Dim CNnwind As New SqlClient.SqlConnection("DATA SOURCE=servername;USER ID=;PASSWORD=;INITIAL CATALOG=northwind;")

Dim DACustomers As New SqlClient.SqlDataAdapter("SELECT CustomerID, CompanyName, ContactName, Country FROM customers WHERE country = 'Germany'", CNnwind)

Dim DAOrders As New SqlClient.SqlDataAdapter("SELECT CustomerID, OrderID, OrderDate, ShippedDate, ShipVia, Freight FROM orders where customerid in (select customerid from customers where country = 'Germany')", CNnwind)

Dim DAOrderDetails As New SqlClient.SqlDataAdapter("Select * from [Order Details] where OrderID in (SELECT OrderID FROM orders where customerid in (select customerid from customers where country = 'Germany'))", CNnwind)

DSNWind = New DataSet()
CNnwind.Open()
DACustomers.Fill(DSNWind, "dtCustomers")
DAOrders.Fill(DSNWind, "dtOrders")
DAOrderDetails.Fill(DSNWind, "dtOrderDetails")
CNnwind.Close()
DSNWind.Relations.Add("CustToOrd", DSNWind.Tables("dtCustomers").Columns("CustomerID"), DSNWind.Tables("dtOrders").Columns("CustomerID")) DSNWind.Relations.Add("OrdToDet", DSNWind.Tables("dtOrders").Columns("OrderID"), DSNWind.Tables("dtOrderdetails").Columns("OrderID")) ''''''''''''''''''''''' TreeView1.Nodes.Clear()

Dim i, n As Integer
Dim parentrow As DataRow
Dim ParentTable As DataTable
ParentTable = DSNWind.Tables("dtCustomers")
For Each parentrow In ParentTable.Rows
Dim parentnode As TreeNode
parentnode = New TreeNode(parentrow.Item(0))
TreeView1.Nodes.Add(parentnode)

Dim childrow As DataRow
Dim childnode As TreeNode
childnode = New TreeNode()
For Each childrow In parentrow.GetChildRows("CustToOrd")
childnode = parentnode.Nodes.Add(childrow(0) & " " & childrow(1) & " " & childrow(2))
childnode.Tag = childrow("OrderID")
Dim childrow2 As DataRow
Dim childnode2 As TreeNode
childnode2 = New TreeNode()
For Each childrow2 In childrow.GetChildRows("OrdToDet")
childnode2 = childnode.Nodes.Add(childrow2(0))
Next childrow2
Next childrow
Next parentrow

Criptare e decriptare con Visualstudio 2005

Ecco due comode funzioni per criptare e decriptare le stringhe:

public static string Encrypt(string encoding, string key)
{ try { byte[] encBytes = Encoding.ASCII.GetBytes(encoding.ToCharArray()); TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider(); MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
des.Key = md5.ComputeHash(Encoding.ASCII.GetBytes(key));
des.Mode = CipherMode.ECB;
ICryptoTransform Transform = des.CreateEncryptor();
byte[]res = Transform.TransformFinalBlock(encBytes, 0, encBytes.Length);
return Convert.ToBase64String(res);
} catch (Exception)
{ throw new ApplicationException("Impossibile criptare la stringa: " + encoding);
}
}


public static string Decrypt(string encoded, string key)
{ try { byte[] encBytes = Convert.FromBase64String(encoded); TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider(); MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
des.Key = md5.ComputeHash(Encoding.ASCII.GetBytes(key));
des.Mode = CipherMode.ECB;
ICryptoTransform Transform = des.CreateDecryptor();
byte[]res = Transform.TransformFinalBlock(encBytes, 0, encBytes.Length);
return Encoding.ASCII.GetString(res);
} catch (Exception)
{ throw new ApplicationException("Impossibile decriptare la stringa: " + encoded);
}

15/01/08

Errore Object of type 'Infragistics.Win.Appearance' cannot be converted to type 'Infragistics.Win.AppearanceBase'.

E' un errore che si verifica quando vengono utilizzati controlli della Infragistics, in particolare la UltraWingrid che e' un ottimo controllo griglia per Visualstudio 2005.
L'errore è dovuto al fatto che nel file di risorse del progetto c'e' un riferimento null ad un oggetto. Per cui basta cliccare col tasto destro sul nome del progetto, poi proprietà - risorse e nelle cellette dove c'e' un valore vuoto per le stringhe scrivere qualsiasi cosa anche a caso ed il problema e' risolto.