Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 1.0/1.1
DataColumn
giovedì 18 maggio 2006 - 13.24
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
LeonDom
Profilo
| Senior Member
471
messaggi | Data Invio:
gio 18 mag 2006 - 13:24
Ragazzi ho questo problema, che non riesco a risolvere.....
Creo una nuova colonna:
Dim im as double
Dim dcImpMax As DataColumn
dcImpMax = New DataColumn("Importo Max", Type.GetType("System.Double"))
dcImpMax.Expression = "sTotLoo"
If dcImpMax.Expression = "IMPORTO_LOO" < "20,00" then
im = "100,00"
Else
im = "200,00"
End If
dcImpMax.Expression = im
dsSQL.Tables(0).Columns.Add(dcImpMax)
Mi estraggo dei dati in una DataGrid, e devo aggiungere un'altra colonna in base ad un importo che mi viene restituito nella DataGrid.... avevo pensato di fare così.... ma non va come vorrei, nel senso che la IF mi restituisce sempre 100 nella colonna appena creata....
Sapete se si può fare questa cosa?
LeonDom
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 18 mag 2006 - 14:53
Cosa intendi per "sTotLoo" e "IMPORTO_LOO", cosa sono per te???
Perchè la proprietà expression serve per impostare il filtro su righe, calcolare valori o creare colonne aggregate..
Alx81 =)
http://blogs.dotnethell.it/suxstellino
LeonDom
Profilo
| Senior Member
471
messaggi | Data Invio:
gio 18 mag 2006 - 15:10
sTotLoo è l'alias di un SUM() di SQLServer.... , ho sbagliato a scrivere il codice.... sorry... te lo riposto meglio....
Dim im as double
Dim dcImpMax As DataColumn
dcImpMax = New DataColumn("Importo Max", Type.GetType("System.Double"))
dcImpMax.Expression = "sTotLoo"
If dcImpMax.Expression = "sTotLoo" < "20,00" then
im = "100,00"
Else
im = "200,00"
End If
dcImpMax.Expression = im
dsSQL.Tables(0).Columns.Add(dcImpMax)
Grazie, per la tua risposta....
LeonDom
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 18 mag 2006 - 15:59
Nella expression puoi mettere l'espressione che permette di eseguire operazioni su di un datatable..
ad esempio con l'expression "campo1 > 100", filtri le righe per quella condizione..
quello che fai tu non può funzionare..
a te cosa serve precisamente?
descrivimi meglio quello che hai, da dove prendi i dati e cosa ci vuoi fare, perchè così non capisco.. scusami..
Alx81 =)
http://blogs.dotnethell.it/suxstellino
LeonDom
Profilo
| Senior Member
471
messaggi | Data Invio:
gio 18 mag 2006 - 16:13
Allora.... io devo estrarre i dati da SQL e fin qui
da questi dati che ho in una datagrid.... devo creare altre colonne e passargli dei valori in base a dei parametri che già ho....
quello che scrivi tu è giusto ma se devo mettere una condizione, tipo IF?
cioè se è > 100 mi deve mettere nella colonna il valore 200 se è < a 200 mi deve mettere nella colonna il valore 100............
ho provato con il codice che ho postato ma non va!!!
LeonDom
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 18 mag 2006 - 16:23
Ok.. allora puoi fare in un modo più semplice..
all'evento ItemDataBound della DataGrid, devi fare il seguente giochino:
Dim DR as DataRowView = DirectCast(e.Item.dataitem,DataRowView)
' aquesto punto hai la riga corrente
If Int32.Parse(DR("sTotLoo").ToString()) > 100 Then
e.item.Cells(indice_di_posizione_della_cella_in_cui_vuoi_scrivere).Text = "200"
End If
If Int32.Parse(DR("sTotLoo").ToString()) < 200 Then
e.item.Cells(indice_di_posizione_della_cella_in_cui_vuoi_scrivere).Text = "100"
End If
Alx81 =)
http://blogs.dotnethell.it/suxstellino
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 18 mag 2006 - 16:58
Cmq fammi sapere se sei riuscito..
ciao!
Alx81 =)
http://blogs.dotnethell.it/suxstellino
LeonDom
Profilo
| Senior Member
471
messaggi | Data Invio:
gio 18 mag 2006 - 17:39
Grazie Axl testo e riposto!!!
LeonDom
LeonDom
Profilo
| Senior Member
471
messaggi | Data Invio:
ven 19 mag 2006 - 11:03
Non funziona.... l'evento ItemDataBound si verifica quando vado a chiamarmi direttamente la cella della datagrid o sbaglio?
a me servirebbe farlo automaticamente al caricamento della datagrid....
avevo pensato di ciclarmi i record in questo modo:
Dim Row as DataRow
For Each Row in DsSQL.Tables("Results").Rows
im = Row("Imp") 'prendo i campi che mi servono
'Eseguo le operazioni che devo fare e rimetto nella row corrispondente il valore
'Tipo una cosa del genere ---->>>> miaDataGrid.Items(i).Cells(i).Text = "Valore"
Next
E' possibile fare una cosa del genere?
LeonDom
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 19 mag 2006 - 11:48
L'ItemDataBound si verifica ogni volta l'item del datagrid (e quindi la Riga) fa il bound..
io l'ho usato spesso.. per esempio, testavo il valore di una cella per cambiare il valore di un'altra..
e ha sempre funzionato...
prova a postare quello che hai scritto.. perchè secondo me è l'evento giusto per te.. =)
Alx81 =)
http://blogs.dotnethell.it/suxstellino
LeonDom
Profilo
| Senior Member
471
messaggi | Data Invio:
ven 19 mag 2006 - 11:50
Private Sub dGridData_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)
Dim DR as DataRowView = DirectCast(e.Item.dataitem,DataRowView)
If Int32.Parse(DR("sTotLoo").ToString()) >= 20 Then
e.item.Cells(8).Text = "20"
End If
If Int32.Parse(DR("sTotLoo").ToString()) < 20 Then
e.item.Cells(8).Text = "10"
End If
End Sub
Ma non scrive nulla....
LeonDom
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 19 mag 2006 - 12:05
Hai provato un po' di debug?
tipo, stampare il valore di DR("sTotLoo")?
oppure vedere se effettivamente la 8 è la cella che ti serve? (partono da 0)
--------------------------------------------------------------------------------------------------------------------
Altra cosa..
potrebbe essere che la tua cella 8 non sia un boundcolumn ma un template, generato con una label al suo interno...
in quel caso devi fare
e.items.cells(8).controls(0).text = "valore"..
ok?
Alx81 =)
http://blogs.dotnethell.it/suxstellino
LeonDom
Profilo
| Senior Member
471
messaggi | Data Invio:
ven 19 mag 2006 - 12:08
Ho provato ma niente...
LeonDom
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 19 mag 2006 - 12:10
posta aspx, ci dobbiamo arrivare in fondo
Alx81 =)
http://blogs.dotnethell.it/suxstellino
LeonDom
Profilo
| Senior Member
471
messaggi | Data Invio:
ven 19 mag 2006 - 12:32
71_pagina.zip
Ti ho allegato la pagina .aspx con cui provo..... ti ho tolto tutta la roba che non ci serve....
non so se è indicativo ma in questo momento utilizzo Macromedia Studio 8 e quando cerco di mettere: Handles dGridData.ItemDataBound
.....
Messaggio di errore del compilatore: BC30506: La clausola Handles richiede una variabile WithEvents.
......
Non riesco a farglielo riconoscere....
Non so se possa dipendere da questo, ma io la butto lì......
LeonDom
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 19 mag 2006 - 12:35
Guarda.. molto probabilmente è quello..
nella dichiarazione del datagrid fai:
Protected WithEvents MioDataGrid as DataGrid
così ti prende l'evento.. sennò nulla, il compilatore non genera nemmeno le modifiche..
prima di farmi guardare l'aspx, prova
Alx81 =)
http://blogs.dotnethell.it/suxstellino
LeonDom
Profilo
| Senior Member
471
messaggi | Data Invio:
ven 19 mag 2006 - 12:51
Se metto la dichiarazione come mi hai detto tu, mi da questo errore:
BC30260: 'dGridData' è già dichiarato come 'Protected Dim dGridData As System.Web.UI.WebControls.DataGrid' in questo class.
Ma non riesco a trovarla, dove c..... la dichiara la dGridData Macromedia?
....sto impazzando ed alla fine sarà per questa C....
LeonDom
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 19 mag 2006 - 12:56
Di solito nei files aspx.vb sono all'inizio..
in una REGION..
non puoi fare una find del contenuto sui file del progetto?
Alx81 =)
http://blogs.dotnethell.it/suxstellino
LeonDom
Profilo
| Senior Member
471
messaggi | Data Invio:
ven 19 mag 2006 - 13:01
Non ho un file di codebehinsd.... e non c'è una region...
LeonDom
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 19 mag 2006 - 13:10
cerca la variabile dGrid* nei tuoi aspx, da qualche parte c'è =)
Alx81 =)
http://blogs.dotnethell.it/suxstellino
LeonDom
Profilo
| Senior Member
471
messaggi | Data Invio:
ven 19 mag 2006 - 14:01
da quello che mi sembra non c'è dichiarazione, ma la prende dall'ID dell'html della DataGrid e bisogna inserire lì l'evento appropriato!!!
LeonDom
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 19 mag 2006 - 14:10
Mi sembra strano..
non riesci a postare tutto l'aspx e quello che tu dici di vedere come dichiarazione??
Alx81 =)
http://blogs.dotnethell.it/suxstellino
LeonDom
Profilo
| Senior Member
471
messaggi | Data Invio:
ven 19 mag 2006 - 15:04
Infatti è così un ex collega che utilizza molto più di me Macromedia, mi ha detto che gran parte degli eventi si gestiscono in questo modo, mettendo l'evento direttamente nella DataGrid con MAIUSC + F5 ed inserendo quello appropriato.....
Sto provando anche a fare in questo modo:
'Dichiaro la DataColumn
Dim dc As DataColumn
dc = New DataColumn("Imp", Type.GetType("System.Double")
dc.ReadOnly = False
dc.Expression = "sTOTLOO" 'questa è l'alias della SUM() di SQLServer
dsSQL.Tables(0).Columns.Add(dc)
Dim im as double
Dim Row as DataRow
For Each Row in DsSQL.Tables("Results").Rows
im = Row("Imp")
if im < 10 then
Row("Imp") = "10,01"
Else
Row("Imp") = "50,01"
End If
Next
Ma l'errore restituito è
System.Data.ReadOnlyException: Column 'Imp' is read only. at System.Data.DataRow.set_Item(DataColumn column, Object value) at System.Data.DataRow.set_Item(String columnName, Object value) at ASP.TMKG_L_ADM_compensi_aspx.btnImgExcel_Click(Object sender, ImageClickEventArgs e)
Sento che ci sono.... sono vicino!!!!
LeonDom
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 19 mag 2006 - 15:08
Tu segui il metodo che credi più appropriato, ma anche la documentazione consiglia di utilizzare il metodo che ti ho consigliato. Io proverei a far partire quell'evento..
comunque, vedi tu..
Alx81 =)
http://blogs.dotnethell.it/suxstellino
LeonDom
Profilo
| Senior Member
471
messaggi | Data Invio:
ven 19 mag 2006 - 15:20
Tentando di far partire l'evento aggiungendo nella dichiarazione HTML onItemBound la restituzione dell'errore è la seguente:
System.NullReferenceException: Object reference not set to an instance of an object. at ASP.TMKG_L_ADM_compensi_aspx.dGridData_ItemDataBound(Object sender, DataGridItemEventArgs e) at System.Web.UI.WebControls.DataGrid.OnItemDataBound(DataGridItemEventArgs e) at System.Web.UI.WebControls.DataGrid.CreateItem(Int32 itemIndex, Int32 dataSourceIndex, ListItemType itemType, Boolean dataBind, Object dataItem, DataGridColumn[] columns, TableRowCollection rows, PagedDataSource pagedDataSource) at System.Web.UI.WebControls.DataGrid.CreateControlHierarchy(Boolean useDataSource) at System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e) at System.Web.UI.WebControls.BaseDataList.DataBind() at ASP.TMKG_L_ADM_compensi_aspx.btnImgExcel_Click(Object sender, ImageClickEventArgs e)
LeonDom
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 19 mag 2006 - 15:34
è strano, ripeto.. non te lo so spiegare.. uso visual studio e non ho mai incontrato il problema..
mi spiace tanto..
Alx81 =)
http://blogs.dotnethell.it/suxstellino
LeonDom
Profilo
| Senior Member
471
messaggi | Data Invio:
ven 19 mag 2006 - 15:36
Ti ringrazio veramente tanto per pazienza..... continuerò a provare!!!!
LeonDom
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !