22 messaggi dal 23 gennaio 2007
Desidero ringraziare di cuore un membro del forum, per la sua pazienza nel seguirmi in alcune problematiche accennate nell'oggetto della presente. Il suo nick è TACCIO (Alessandro). Mi ha fornito un aiuto notevole su un'applicazione importante, ha tradotto BEN 2 VOLTE alcuni codici di ADO in linguaggi diversi solo x me e ... si sarà esaurito un tantino con tutti quegli errori di debug  ..QUINDI.... GRAZIE, GRAZIE DI CUORE A LUI E ALLO STAFF DEL FORUM CHE AVETE PERMESSO TUTTO CIO.


VORREI POSTARE IL CODICE CORRETTO PER LE PROBLEMATICHE INIZIATE DA ME QUALCHE GIORNO FA.

ALLORA...

per ridimensionare a RUNTIME alcune colonne del gridview basta fare questo:

1) Impostare nella testata del gridview (nell'origine, ovvero nel codice html) il parametro AutoGenerateColumns="TRUE"

Cmq l'intera testata io la ho cosi:
<asp:GridView ID="gw1" runat="server" OnSelectedIndexChanging="gw1_SelectedIndexChanging" DataKeyNames="id,nome" AllowPaging="True"
OnPageIndexChanging="gw1_PageIndexChanging" EnableViewState="False" CellPadding="3" BackColor="#DEBA84" BorderColor="#DEBA84"
BorderStyle="None" BorderWidth="1px" CellSpacing="2" AutoGenerateColumns="True">
<Columns>
<asp:CommandField HeaderText="Clicca sul link per il Download" ShowHeader="True" ShowSelectButton="True" SelectText="Download" />
</Columns>
<FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
<RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
<PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
<HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
</asp:GridView>



2) Caricare una tabella da associare al GW in questo modo:

Dim ds As New DataSet
Dim DataTabl As New DataTable("tb1")
Dim DataCol As New DataColumn
Dim rigas As DataRow
Dim I As Integer




Dim path As String = HostingEnvironment.ApplicationPhysicalPath() & "\mdb-database\"
My.Response.Expires = 0

' crea connessione
Dim cn As OleDbConnection
Dim ConnectionString As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & path & "\DatabaseQualsiasi.mdb;" & _
"User ID=Admin;" & _
"Password="
cn = New Data.OleDb.OleDbConnection(ConnectionString)
cn.Open()
Dim SQL As String


' recupero numero accessi attuale
SQL = "SELECT * FROM Anagrafica where anagrafica.ciao='" & _
HttpContext.Current.Session.Item("ciao") & "';"

Dim Selezione As New OleDbCommand(SQL, cn)
Dim RD As OleDbDataReader = Selezione.ExecuteReader()

DataCol.ColumnName = "ID"
DataCol.DataType = System.Type.GetType("System.Int32")
DataCol.AutoIncrement = True
DataTabl.Columns.Add(DataCol)
DataCol = New DataColumn
DataCol.DataType = System.Type.GetType("System.String")
DataCol.ColumnName = "Nome"
DataCol.Caption = "Nome Colonna "
DataTabl.Columns.Add(DataCol)
DataCol = New DataColumn
DataCol.DataType = System.Type.GetType("System.String")
DataCol.ColumnName = "Descrizione "
DataTabl.Columns.Add(DataCol)

While RD.Read
rigas = DataTabl.NewRow
rigas.Item(0) = RD.Item("anagrafica.ID")
rigas.Item(1) = RD.Item(5).ToString
rigas.Item(2) = RD.Item(6).ToString
'ecc ecc
DataTabl.Rows.Add(rigas)
End While
' chiusura connessione
cn.Close()
ds.Tables.Add(DataTabl)

gw1.DataSource = ds
gw1.Columns(0).ItemStyle.Width = 200
gw1.DataBind()



3) Passo piu importante:
e qui dovrete inserire le vostre misure...



Protected Sub gw1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gw1.RowCreated
If e.Row.RowType = DataControlRowType.DataRow Then
Try
e.Row.Cells(1).Visible = False
e.Row.Cells(2).Width = 900
Catch ex As Exception
'MsgBox(e.Row.Cells.Count)
End Try
Else
Try
e.Row.Cells(1).Visible = False
Catch EX As Exception

End Try
End If


End Sub





OK... tutto fatto! Grazie ancora.
426 messaggi dal 17 aprile 2006
esagerato :)

una cosuccia specificherei meglio... date le lotte di debug:
per dimensionare le colonne di un gridview con AutoGenerateColumns = "False" si può usare
GridView1.Columns(1).ItemStyle.Width = 10
dove Columns(x) rappresenta il numero di colonna in base 0

se però fate generare le colonne in automatico AutoGenerateColumns = "True" allora nel codebehind non c'è verso di vederle e columns(x) da errore, mentre Columns.Count torna sempre 0.

per ovviare a tale problema in caso di gridview con autogeneratecolumns = true si consiglia di gestire un event handler sollevato alla creazione di una nuova riga della GridView
Protected Sub gw1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gw1.RowCreated 
If e.Row.RowType = DataControlRowType.DataRow Then 
Try 
e.Row.Cells(1).Visible = False 
e.Row.Cells(2).Width = 900 
...

verificando che la riga creata sia una riga di dati e non una testata o un paginatore mediante
If e.Row.RowType = DataControlRowType.DataRow Then 

questo metodo può essere impiegato sia che le colonne vengano create automaticamente sia che le impostiate a mano tra i tag <Columns></Columns>

infine una correzione:
non è necessario impostare AutoGenerateColumns="True", anzi se lo fate non potrete usare i metodi GridView1.Columns(1).ItemStyle.Width

infine grazie a criptus che ha ripostato la soluzione a vantaggio di tutti

Ciao Alessandro

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.