Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: update e datagrid

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    687

    update e datagrid

    Ciao,
    allora cerco di desdeggiarmi con .net con i libri ma ci sono cose che non capisco.
    Faccio un esempio pratico preso dal libro Apogeo:
    ho questo script:

    <%@ Page Language="VB"%>
    <%@ Import Namespace="System.Data"%>
    <%@ Import Namespace="System.Data.OleDb"%>

    <script runat="server">
    dim ds as DataSet
    dim blnSet as Boolean = false

    sub Page_Load(obj as Object, e as EventArgs)
    ds = CreateDataSet
    blnSet = true
    if not Page.IsPostBack then
    BindGrid
    end if
    end sub

    sub BindGrid()
    dgColors.DataSource = ds
    dgColors.DataMember = "Colors"
    DataBind()
    end sub
    sub ChangeColor(obj as object, e as DataGridItemEventargs)
    dim intIndex as Integer = e.Item.ItemIndex

    if blnSet then
    if intIndex > 0 then
    dgColors.Items(intIndex - 1).BackColor = Drawing.Color.FromName(ds.Tables("Colors").Rows(in tIndex-1)("Color"))
    dgColors.Items(intIndex - 1).ForeColor = Drawing.Color.FromName(ds.Tables("Colors").Rows(6-intIndex)("Color"))
    end if
    end if
    end sub

    sub dgColors_Edit(obj as object, e as DataGridCommandEventArgs)
    dgColors.EditItemIndex = e.Item.ItemIndex
    BindGrid()
    end sub

    sub dgColors_Cancel(obj as object, e as DataGridCommandEventArgs)
    dgColors.EditItemIndex = -1
    BindGrid()
    end sub

    sub dgColors_Update(obj as object, e as DataGridCommandEventArgs)
    dim strColor as String = Ctype(e.Item.Cells(1).Controls(0), TextBox).Text

    ds.Tables("Colors").Rows(e.Item.ItemIndex) ("Color") = strColor

    ViewState("Colors")(e.Item.ItemIndex) = strColor

    dgColors.EditItemIndex = -1
    BindGrid
    end sub

    function CreateDataSet as DataSet
    dim i as integer
    dim arrColors() as string
    if ViewState("Colors") is nothing then
    arrColors = new String(6) {"red", "orange", "yellow", "green", "blue", "indigo", "white"}
    ViewState("Colors") = arrColors
    else
    arrColors = ViewState("Colors")
    end if
    'crea l'oggetto dataset vuoto
    ds = new DataSet("MyDataSet")

    'Crea una nuova tabella e le relative colonne
    dim dTable as New DataTable("Colors")
    dTable.Columns.Add("Color", GetType(String))
    dTable.Columns.Add("ID", GetType(Int32))

    'add table
    ds.Tables.Add(dTable)

    'aggiungo le righe
    for i=0 to 6
    dim dr as DataRow = dTable.NewRow()
    dr(0) = arrColors(i).ToString
    dr(1) = i
    dTable.Rows.Add(dr)
    next
    return ds
    end function


    </script>

    <html>
    <body>
    <form runat="server">

    <asp:datagrid id="dgColors" runat="server" AutoGenerateColumns="false" Width="200" OnEditCommand="dgColors_Edit" OnUpdateCommand="dgColors_Update" OnCancelCommand="dgColors_Cancel" OnItemCreated="ChangeColor">
    <columns>
    <asp:templatecolumn HeaderText="id">
    <itemtemplate>
    <asp:label ID="lblID" runat="server" Text='<%# Container.DataItem("ID")%>'/>
    </itemtemplate>
    </asp:templatecolumn>
    <asp:boundcolumn DataField="Color" HeaderText="Color"/>
    <asp:editcommandcolumn HeaderText="Change" EditText="Edit" UpdateText="Change" CancelText="Cancel"/>
    </columns>
    </asp:datagrid>
    </form>
    </body>
    </html>

    Quando clicco su UPDATE al posto del colore compare un campo testo ed io lo posso modificare.
    Ok la mia domanda è come posso modificare le dimensioni di questo campo testo?
    Magari impostandolo multilinea?
    Mi serve per altre cose ma utilizzo lo script per esempio.

    Grazie!

  2. #2
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    nn penso si possa fare.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    687
    grazie per la risposta....ma a cosa serve .net se ogni volta per fare una cosa o non si può fare o è un mega casino...
    va beh......

    ciao!

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da nikasil
    grazie per la risposta....ma a cosa serve .net se ogni volta per fare una cosa o non si può fare o è un mega casino...
    va beh......

    ciao!
    Per tutte le cose ci vuole pazienza

    Si può fare in diversi modi. Uno per esempio è quello di sfruttare l'evento dgColors_ItemCreated

    codice:
        Private Sub dgColors_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgColors.ItemCreated
            Select Case e.Item.ItemType
                Case ListItemType.EditItem
                    If e.Item.Cells(1).Controls.Count > 0 Then
                        If TypeOf e.Item.Cells(1).Controls(0) Is TextBox Then
                            Dim t As TextBox = DirectCast(e.Item.Cells(1).Controls(0), TextBox)
                            t.TextMode = TextBoxMode.MultiLine
                            t.BorderColor = Color.Blue
                            t.Width = Unit.Pixel(300)
                        End If
                    End If
            End Select
        End Sub

    Un altro, che io uso e che ti consiglio è:
    Non utilizzare il datagrid per le modifiche alla base dati.
    Pietro

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    687
    Molte grazie, provo subito.
    Al posto del datagrid cosa consigli per modificare i dati?

    ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    687
    Originariamente inviato da pietro09
    Per tutte le cose ci vuole pazienza

    Si può fare in diversi modi. Uno per esempio è quello di sfruttare l'evento dgColors_ItemCreated

    codice:
        Private Sub dgColors_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgColors.ItemCreated
            Select Case e.Item.ItemType
                Case ListItemType.EditItem
                    If e.Item.Cells(1).Controls.Count > 0 Then
                        If TypeOf e.Item.Cells(1).Controls(0) Is TextBox Then
                            Dim t As TextBox = DirectCast(e.Item.Cells(1).Controls(0), TextBox)
                            t.TextMode = TextBoxMode.MultiLine
                            t.BorderColor = Color.Blue
                            t.Width = Unit.Pixel(300)
                        End If
                    End If
            End Select
        End Sub

    Un altro, che io uso e che ti consiglio è:
    Non utilizzare il datagrid per le modifiche alla base dati.

    Se mi vesto di nudo sacco e ti dico che non so dove metterlo il codice che mi hai postato?
    Scusa l'ignoranza.....

    Quando puoi.
    Ciao

  7. #7
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    è un evento del datagrid,viene scatenato quando l'elemento nel datagrid viene creato.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    687
    Ho capito ma nel codice postato all'inizio dove lo devo inserire?

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    In effetti hai ragione. Io ho convertito l'esempio quando studiavo, utilizzando il Codebehind. Ma tu non lo usi (e fai male) perciò:

    1) inserisci questo spazio dei nomi: <%@ Import Namespace="System.Drawing"%>


    2) Guarda il controllo datagrid e vedrai che è dichiarato l'evento:

    OnItemCreated="ChangeColor"

    Perciò, vai alla procedura ChangeColor e aggiungi il codice che ti ho suggerito

    Ti rimando la pagina completa. La formattazione fa schifo e mi vergogno, ma non ho tempo di sistemare.
    codice:
    <%@ Page Language="VB"%>
    <%@ Import Namespace="System.Data"%>
    <%@ Import Namespace="System.Data.OleDb"%>
    <%@ Import Namespace="System.Drawing"%>
    <script runat="server">
    		dim ds as DataSet
    		dim blnSet as Boolean = false
    		
    			sub Page_Load(obj as Object, e as EventArgs)
    				ds = CreateDataSet
    				blnSet = true
    					if not Page.IsPostBack then
    						BindGrid
    						end if
    						end sub
    						
    							sub BindGrid()
    								dgColors.DataSource = ds
    								dgColors.DataMember = "Colors"
    								DataBind()
    								end sub
    					sub ChangeColor(obj as object, e as DataGridItemEventargs)
    						dim intIndex as Integer = e.Item.ItemIndex
    						
    						if blnSet then
    							if intIndex > 0 then
    								dgColors.Items(intIndex - 1).BackColor = Drawing.Color.FromName(ds.Tables("Colors").Rows(intIndex-1)("Color"))
    								dgColors.Items(intIndex - 1).ForeColor = Drawing.Color.FromName(ds.Tables("Colors").Rows(6-intIndex)("Color"))
    								end if
    								end if
    	Select Case e.Item.ItemType
    		Case ListItemType.EditItem
    			If e.Item.Cells(1).Controls.Count > 0 Then
    				If TypeOf e.Item.Cells(1).Controls(0) Is TextBox Then
    					Dim t As TextBox = DirectCast(e.Item.Cells(1).Controls(0), TextBox)
    					t.TextMode = TextBoxMode.MultiLine
    					t.BorderColor = Color.Blue
    					t.Width = Unit.Pixel(300)
    				End If
    			End If
    	End Select
    								
    								
    					end sub
    								
    								sub dgColors_Edit(obj as object, e as DataGridCommandEventArgs)
    									dgColors.EditItemIndex = e.Item.ItemIndex
    									BindGrid()
    									end sub
    									
    								sub dgColors_Cancel(obj as object, e as DataGridCommandEventArgs)
    									dgColors.EditItemIndex = -1
    									BindGrid()
    									end sub
    									
    								sub dgColors_Update(obj as object, e as DataGridCommandEventArgs)
    									dim strColor as String = Ctype(e.Item.Cells(1).Controls(0), TextBox).Text
    									
    									ds.Tables("Colors").Rows(e.Item.ItemIndex) ("Color") = strColor
    									
    									ViewState("Colors")(e.Item.ItemIndex) = strColor
    									
    									dgColors.EditItemIndex = -1
    									BindGrid
    									end sub
    									
    			function CreateDataSet as DataSet
    				dim i as integer
    				dim arrColors() as string
    					if ViewState("Colors") is nothing then
    						arrColors = new String(6) {"red", "orange", "yellow", "green", "blue", "indigo", "white"}
    						ViewState("Colors") = arrColors
    							else
    						arrColors = ViewState("Colors")
    						end if
    						'crea l'oggetto dataset vuoto
    						ds = new DataSet("MyDataSet")
    						
    						'Crea una nuova tabella e le relative colonne
    						dim dTable as New DataTable("Colors")
    							dTable.Columns.Add("Color", GetType(String))
    						    dTable.Columns.Add("ID", GetType(Int32))
    							
    							'add table
    							ds.Tables.Add(dTable)
    							
    							'aggiungo le righe
    							for i=0 to 6
    								dim dr as DataRow = dTable.NewRow()
    								dr(0) = arrColors(i).ToString
    								dr(1) = i
    								dTable.Rows.Add(dr)
    									next
    									return ds
    									
    					end function
    
    
    Private Sub dgColors_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) 
    	Select Case e.Item.ItemType
    		Case ListItemType.EditItem
    			If e.Item.Cells(1).Controls.Count > 0 Then
    				If TypeOf e.Item.Cells(1).Controls(0) Is TextBox Then
    					Dim t As TextBox = DirectCast(e.Item.Cells(1).Controls(0), TextBox)
    					t.TextMode = TextBoxMode.MultiLine
    					t.BorderColor = Color.Blue
    					t.Width = Unit.Pixel(300)
    				End If
    			End If
    	End Select
    End Sub
    							
    												
    </script>
    <html>
    	<body>
    		<form runat="server" ID="Form1">
    			<asp:datagrid id="dgColors" runat="server" AutoGenerateColumns="false" Width="200" OnEditCommand="dgColors_Edit"
    				OnUpdateCommand="dgColors_Update" OnCancelCommand="dgColors_Cancel" OnItemCreated="ChangeColor">
    				<columns>
    					<asp:templatecolumn HeaderText="id">
    						<itemtemplate>
    							<asp:label ID="lblID" runat="server" Text='<%# Container.DataItem("ID")%>'/>
    						</itemtemplate>
    					</asp:templatecolumn>
    					<asp:boundcolumn DataField="Color" HeaderText="Color" />
    					<asp:editcommandcolumn HeaderText="Change" EditText="Edit" UpdateText="Change" CancelText="Cancel" />
    				</columns>
    			</asp:datagrid>
    		</form>
    	</body>
    </html>

    ACTUNG: per ricopiare il codice, quota, selezioni tutto e copia, altrimenti avresti codice corrotto.

    L'ho provato e funziona. Ciao
    Pietro

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    687
    Funziona! grazie mille per la disponibilità.

    ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.