Newsgroup: it.comp.lang.visual-basic
Titolo: [VB.net] Datagridview...e poi uno è polemico!

...perchè poi uno passa da polemico!..anche quando poverino non lo è!
e siccome non ci credete sulla parola...mi tocca scrivere per mezzora prima 
di chiedere e tirare le conclusioni!
grrrr...malfidati!  :o)
VB.net SQLserver....
Logica
Click....recupero dati da SQlserv e li metto in locale...disconnetti
Click...li mostro al client...con tutte le cazzatine e gli orpelli 
grafici...
finito utonto di stressare? si???...chiudi la finestra o click su 
salva...raccoglie modifiche le spara alla stored...si incazza se qualcuno è 
arrivato prima e decide che fare!
per ora va bene così....
Allora vi dico cosa voglio fare...
datareader recupera i dati...in datagridview mostra un piccola 
anteprima....CLICK...espande su una form modale che si apre il record...a 
disposizione dell'utente per modificare il record...che poi SQLserv si 
rimangerà!...una soluzione del genere è veloce...la datagrid si può 
ordinare...filtrare..etc etc
Quando deve modificare va fatta attenzione a un sacco di roba e quindi 
merita una form a se stante!
QUINDI
i dati vengono messi in una datatable
poi una selezione di loro viene mostrata...ed il grosso appare alla bisogna
la cosa suppergiù è questa
With DW
.AutoGenerateColumns = False
.Columns.Clear()
.Columns.Add("Cognome", "Cognome:")
.Columns.Add("Nome", "Nome:")
.Columns.Add("Indirizzo", "Indirizzo:")
.Columns.Add("Citta", "Citt.:")
.Columns.Add("CAP", "CAP")
.Columns.Add("Provincia", "Prov.:")
.Columns(0).DataPropertyName = "Cognome"
.Columns(1).DataPropertyName = "Nome"
.Columns(2).DataPropertyName = "Indirizzo"
.Columns(3).DataPropertyName = "Citta"
.Columns(4).DataPropertyName = "CAP"
.Columns(5).DataPropertyName = "Provincia"
.Columns(0).Width = 120
.Columns(1).Width = 120
.Columns(2).Width = 250
.Columns(3).Width = 100
.Columns(4).Width = 70
.Columns(5).Width = 70
.RowHeadersWidth = 25
.BackColor = Color.WhiteSmoke
.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(237, 239, 238)
Dim t As Integer
t = .RowHeadersWidth + .Columns(0).Width + .Columns(1).Width + 
.Columns(2).Width + .Columns(3).Width + .Columns(4).Width + 
.Columns(5).Width
t += 20
.Width = t
End With
la form appare con un meccanismo del genere..al post del msgbox ci sarà una 
riga di dataTable che viene sparata alla form
Private Sub DW_RowHeaderMouseClick(ByVal sender As Object, ByVal e As 
System.Windows.Forms.DataGridViewCellMouseEventArgs)
Dim pos As Integer
Dim t As DataRow
Dim risp As String = ""
pos = e.RowIndex.ToString
MsgBox(pos.ToString)
t = localDT(pos)
risp = t(0).ToString() + " - " + t(2).ToString + " - " + t(3).ToString + " - 
" + t(6).ToString + " - " + t(7).ToString
MsgBox(risp)
End Sub
il sistema è bello funzionale veloce...se poi metti le scorciatoie da 
tastiera è pure buono per il dataentry spinto(ossia per la segretaria che ci 
stà 4 ore al giorno)!
PERO'
ecco la domanda...
non ti azzardare ad andare fuori standard!
Ad esempio:
fa click sull'intestazione di riga si accende la riga ed appare la finestra!
BENE...MA IO
a) Vorrei mettere un testo in ogni rowheader
b) vorrei fare a) in automatico...ad esempio mettendo numeri di riga...o un 
testo("clicca qui")
c) Ancora meglio...ci vorrei mettere una iconcina e casomai restringerlo 
alle dimensioni dell'iconcina
d) Vorrei colorarlo diverso dell'header delle colonne (vabbè questo si può 
fare....)
la soluzione è farsi un ciclo for next DOPO che è stata riempita
for
.Rows.Item(cicla).HeaderCell.Value = "pippo"
next
per l'immagine ancora non ho trovato soluzione!
però mi preme far vedere...che se non è zuppa è pan bagnato...dall grid32 a 
ora..i problemi sono i soliti...e le soluzioni...pressappoco uguali!
Bastava poter "bindare" anche il rowhead...allora ci associavi un campo ed 
era fatta
e una una proprietà rowheads.picture...e rowhead(n).picture ?
so già la risposta di qualcuno...
deriva dalla classe datagridview e fatti la tua (s)griglia personale!
Che è un po come farsi un controllo ad hoc con il vecchio vb6....
e si ritorna sempre lì......
e il polemico poi son io!
eh eh eh!
E vabbe!
:o)
-----------------------------
Mio Blog
http://www.martek.it/dblog/default.asp
Mia città
http://wodka40hall.myminicity.com/
****
In evidenza questa settimana
http://www.martek.it/dblog/articolo.asp?articolo=112
 


Dai andiamo al mare tutti quati meee!!!!!
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

quando uno sbaglia è giusto che lo dica
perso in tutte le opzioni c'è anche
.RowTemplate.HeaderCell.Value = "jjjj"
che ci mette il testo!
Sorry....è il caldo!

ma immagini e funzioni non mi sembra le accetti.....boh!
forse a derivare! 

 forse a derivare!
Se uno fa il falegname dovrebbe fare porte e finestre. Non nuove seghe. 
Quelle dovrebbe trovarle gia pronte all'inizio dell'attività. Al massimo 
deve preoccuparsi di tenerle ben affilate, e comprare quel modello nuovo che 
fa quel tipo di taglio che non è possibile fare con le altre.
Io la vedo cosi.
Purtroppo ho la sensazione chee col NET il falegname faccia poche porte e 
finestre e....
-- 
Greg 

...le seghe sono l'anima del commercio caro mio!!!
http://www.vizioso.org/pcid_21-150.html
La vecchia Manola vien preferita alla Poppea!
Forse perchè le solite poppee son venute a noia!
Certo se Poppea incontrasse Manola
ed è quello che si cerca di fare
nell'assurda assurdità della gridview...in mezzo a decine di eventi...c'è 
pure
DW_RowPrePaint
sssssst!zitto!
è quella la strada per far apparire una icona...son perso nei meandri dei 
namespace ...se mi distraggo son fottuto!
anche perchè la sega aumenta...l'icona la voglio mettere in un file risorse 
e caricarla da li!

 risorse e caricarla da li!
... poi mi piacerebbe che finestra si aprisse non solo dal centro verso 
destra e sinistra, ma anche dall'altro come certe che ho visto. Non so se ha 
presente....In ogni caso servirebberro per lunedi che c'è anche il 
muratore....
-- 
Greg 


mi ci posso impegnare ...certo ...non gratis!
;o)
Finchè rimangono queste pretese....la form fucsia invece ASSOLUTAMENTE mi 
rifiuto! 

 ha scritto nel messaggio
zac
Alla fine uno si deve ricredere ed ammettere lo sbaglio!
Datagridview è complessisssimo...c'ha un sacco di eventi e "aggieggi" 
appicicati...un incubo a sviscerarli tutti!
basta fare
Private Sub DW_RowPostPaint(ByVal sender As Object, ByVal e As 
System.Windows.Forms.DataGridViewRowPostPaintEventArgs) Handles 
DW.RowPostPaint
'Box che contiene l'icona
'S parametrizzato in base all'angolo in alto della riga
'l'icona viene ridimensionata per stare dentro il rettangolo...che qui S un 
quadrato!
Dim BoxIco = New Rectangle(e.RowBounds.Location.X + 1, 
e.RowBounds.Location.Y + 1, 16, 16)
Using b As SolidBrush = _
New SolidBrush(DW.RowHeadersDefaultCellStyle.ForeColor)
e.Graphics.DrawIcon(My.Resources.info01, BoxIco)
End Using
End Sub
per mostrare una icona nel rowHeader (l'ho messa nelle risorse del progetto: 
My.Resources.info01) bisogna fare semplicemente questo!
lo posto perchè io c'ho sbattuto un pomeriggio a 35 gradi...e non l'auguro a 
nessuno!...e forse a qualcun altro può servire!
Per chi vuole sperimentare ancora
La potenza sta li
e.Graphics
questa istruzione...ti fa accedere al System.Drawing.Graphics che usa la 
griglia per disegnare l'header
se ci appiccichi qualcosa....è un mondo che si apre!
sfumatore..fill con bitmap...etc etc....tutto quello che consente 
Graphics!!!
Come diceva paperino...alla fine tutte ste scelte tendono a far perdere 
l'obiettivo che è compilare una fattura....ma insomma...se serve...c'è!!!


 zac
e siccome stamani voglio far inorridire Paperino.....
Papero?
costruisciti una datagridview chiamala DW
poi trovati una gif di un orsetto...o un cavallino...o una fatina...chiamala 
"blinkanimato" e mettila nelle risorse del progetto (purtroppo non si 
muove...ma forse perchč ci si deve spippolare ulteriolmente!!! :oP )
blocca l'allargamento orizzontale del rowheader
DW.RowHeadersWidth = 70
DW.RowHeadersWidthSizeMode = 
DataGridViewRowHeadersWidthSizeMode.DisableResizing
incolla questo evento
Private Sub DW_RowPostPaint(ByVal sender As Object, ByVal e As 
System.Windows.Forms.DataGridViewRowPostPaintEventArgs) Handles 
DW.RowPostPaint
'Box che contiene l'icona
'S parametrizzato in base all'angolo in alto della riga
'l'icona viene ridimensionata per stare dentro il rettangolo...che qui S un 
quadrato!
Dim psicorect As New Rectangle(e.RowBounds.Location.X + 2, 
e.RowBounds.Location.Y + 2, DW.RowHeadersWidth - 4, e.RowBounds.Height - 4)
Using b As LinearGradientBrush = New LinearGradientBrush(psicorect, 
Color.Pink, Color.HotPink, LinearGradientMode.Vertical)
Dim BoxIco = New Rectangle(e.RowBounds.Location.X + 1, 
e.RowBounds.Location.Y + 1, 32, 32)
e.Graphics.FillRectangle(b, psicorect)
e.Graphics.DrawImage(My.Resources.blinkanimato, BoxIco)
End Using
End Sub
....metti gli occhiali da sole
ridimensiona in verticale il rowheader!!!
Adesso anche tu puoi finalmente fornire alle tue segretarie le griglie rosa 
con l'orsetto pooh come segnaposto!
E poi dici che il wodkino nazionale non ti vuole bene!
ROTFL
-- 
-----------------------------
Mio Blog
http://www.martek.it/dblog/default.asp
Mia cittŕ
