Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2000
    Messaggi
    96

    recuperare il DataSource da una DataGrid

    Come faccio a recuperare il Dataset da una web Datagrid?

    Allora...penso che il viewstate al datagrid lo devo lasciare, perchè gli serve per ricostruirsi in fase di postback.

    La mia intenzione è infatti quella di:
    1) fare un Fill su un dataset, riempiendolo con dei dati provenienti da una join di 2 tabelle di un DB
    2) associare la DataTable risultante ad un controllo web Datagrid
    3) l'utente apporta alcune modifiche su alcuni campi, visualizzati in delle textbox dentro la Datagrid
    4) l'utente preme un bottone "Aggiorna" , che risalvi i dati in una tabella del DB

    Bene. Il mio problema è che non riesco a recuperare il dataset (o quantomeno la datatable) dal Datagrid, dall'handler dell'evento click del bottone.

    Ho provato a riferirmi alla proprietà Datagrid.Datasource (facendogli un CType in DataTable, visto che restituisce un object)....ma non funziona. Il Datasource mi restituisce un Nothing.

    Come posso risolvere ?

    Ah...nel caso in cui riuscissi a recuperare la DataTable... se il valore di una textbox dal controllo datagrid è stato modificato, il RowState per la corrispondente riga della DataTable cambia ? cioè....passa automaticamente in Modified ?

    Ciao e grazie mille.

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    1,482
    ma se con il pulsante "aggiorna" fai un Update del DataTable non sei a posto?

    Hey hey, my my Rock and roll can never die!

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2000
    Messaggi
    96
    eh ??!?

    puoi spiegarmi meglio ?

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    1,482
    Tratto dalla guida dell SDK:

    codice:
    <%@ Import Namespace="System.Data" %>
     
    <html>
    
       <script language="VB" runat="server">
     
        Dim Cart As New DataTable()
        Dim CartView As DataView
        Sub Page_Load(sender As Object, e As EventArgs)
            Dim dr As DataRow
            
            If Session("ShoppingCart") Is Nothing Then
                
                Cart.Columns.Add(New DataColumn("Qty", GetType(String)))
                Cart.Columns.Add(New DataColumn("Item", GetType(String)))
                Cart.Columns.Add(New DataColumn("Price", GetType(String)))
                Session("ShoppingCart") = Cart
                
                ' Make some rows and put some sample data in
                Dim i As Integer
                For i = 1 To 4
                    dr = Cart.NewRow()
                    If i Mod 2 <> 0 Then
                        dr(0) = "2"
                    Else
                        dr(0) = "1"
                    End If
                    dr(1) = "Item " + i.ToString()
                    dr(2) =(1.23 *(i + 1)).ToString()
                    Cart.Rows.Add(dr)
                Next i
            Else
                Cart = CType(Session("ShoppingCart"), DataTable)
            End If 
            CartView = New DataView(Cart)
            CartView.Sort = "Item"
            
            If Not IsPostBack Then
                BindGrid()
            End If 
        End Sub 'Page_Load
    
    
        Sub MyDataGrid_Edit(sender As Object, e As DataGridCommandEventArgs)
            MyDataGrid.EditItemIndex = e.Item.ItemIndex
            BindGrid()
        End Sub 'MyDataGrid_Edit
    
    
        Sub MyDataGrid_Cancel(sender As Object, e As DataGridCommandEventArgs)
            MyDataGrid.EditItemIndex = - 1
            BindGrid()
        End Sub 'MyDataGrid_Cancel
    
    
        Sub MyDataGrid_Update(sender As Object, e As DataGridCommandEventArgs)
            ' For bound columns the edited value is stored in a textbox,
            ' and the textbox is the 0th element in the column's cell
            Dim qtyText As TextBox = CType(e.Item.Cells(2).Controls(0), TextBox)
            Dim priceText As TextBox = CType(e.Item.Cells(3).Controls(0), TextBox)
            
            Dim item As String = e.Item.Cells(1).Text
            Dim qty As String = qtyText.Text
            Dim price As String = priceText.Text
            
            Dim dr As DataRow
            
            ' with a database, we'd use an update command.  Since we're using an in-memory
            ' DataTable, we'll delete the old row and replace it with a new one
            ' remove old entry
            CartView.RowFilter = "Item='" & item & "'"
            If CartView.Count > 0 Then
                CartView.Delete(0)
            End If
            CartView.RowFilter = ""
            
            ' add new entry
            dr = Cart.NewRow()
            dr(0) = qty
            dr(1) = item
            dr(2) = price
            Cart.Rows.Add(dr)
            
            MyDataGrid.EditItemIndex = - 1
            BindGrid()
        End Sub 'MyDataGrid_Update
    
    
        Sub BindGrid()
            MyDataGrid.DataSource = CartView
            MyDataGrid.DataBind()
        End Sub 'BindGrid
     
       </script>
     
    <body>
     
       <form runat="server">
    
          <h3><font face="Verdana">DataGrid Editing Example</font></h3>
     
          <asp:DataGrid id="MyDataGrid" runat="server"
               BorderColor="black"
               BorderWidth="1"
               CellPadding="3"
               Font-Name="Verdana"
               Font-Size="8pt"
               OnEditCommand="MyDataGrid_Edit"
               OnCancelCommand="MyDataGrid_Cancel"
               OnUpdateCommand="MyDataGrid_Update"
               AutoGenerateColumns="false">
    
             <HeaderStyle BackColor="#aaaadd">
             </HeaderStyle>
     
             <Columns>
                <asp:EditCommandColumn
                     EditText="Edit"
                     CancelText="Cancel"
                     UpdateText="Update"
                     HeaderText="Edit Command Column">
    
                   <ItemStyle Wrap="false">
                   </ItemStyle>
    
                   <HeaderStyle Wrap="false">
                   </HeaderStyle>
    
                </asp:EditCommandColumn>
     
                <asp:BoundColumn HeaderText="Item" ReadOnly="true" DataField="Item"/>
                <asp:BoundColumn HeaderText="Quantity" DataField="Qty"/>
                <asp:BoundColumn HeaderText="Price" DataField="Price"/>
             </Columns>
          </asp:DataGrid>
     
       </form>
     
    </body>
    </html>
    [C#] 
    <%@ Import Namespace="System.Data" %>
     
    <html>
    
       <script language="C#" runat="server">
     
          DataTable Cart = new DataTable();
          DataView CartView;   
     
          void Page_Load(Object sender, EventArgs e) 
          {
             DataRow dr;
     
             if (Session["ShoppingCart"] == null) 
             {       
     
                Cart.Columns.Add(new DataColumn("Qty", typeof(String)));
                Cart.Columns.Add(new DataColumn("Item", typeof(String)));
                Cart.Columns.Add(new DataColumn("Price", typeof(String)));
                Session["ShoppingCart"] = Cart;
                 
                // Make some rows and put some sample data in
                for (int i = 1; i <= 4; i++) 
                {
                   dr = Cart.NewRow();
                   if (i % 2 != 0)
                      dr[0] = "2";
                   else
                      dr[0] = "1";
                   dr[1] = "Item " + i.ToString();
                   dr[2] = (1.23 * (i + 1)).ToString();
                   Cart.Rows.Add(dr);
                }
             }
             else
                Cart = (DataTable)Session["ShoppingCart"];          
     
             CartView = new DataView(Cart);
             CartView.Sort="Item";
     
             if (!IsPostBack)
                BindGrid(); 
                       
          }
     
          void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs e) 
          {
             MyDataGrid.EditItemIndex = e.Item.ItemIndex;
             BindGrid();
          }
     
          void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e) 
          {
             MyDataGrid.EditItemIndex = -1;
             BindGrid();
          }
     
          void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e) 
          {
             // For bound columns the edited value is stored in a textbox,
             // and the textbox is the 0th element in the column's cell
             TextBox qtyText = (TextBox)e.Item.Cells[2].Controls[0];
             TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];
     
             String item = e.Item.Cells[1].Text;  
             String qty = qtyText.Text;
             String price = priceText.Text;
            
             DataRow dr;
     
             // with a database, we'd use an update command.  Since we're using an in-memory
             // DataTable, we'll delete the old row and replace it with a new one
             // remove old entry
             CartView.RowFilter = "Item='" + item + "'";
             if (CartView.Count > 0)
                CartView.Delete(0);
             CartView.RowFilter = "";
     
             // add new entry
             dr = Cart.NewRow();
             dr[0] = qty;
             dr[1] = item;
             dr[2] = price;
             Cart.Rows.Add(dr);
     
             MyDataGrid.EditItemIndex = -1;
             BindGrid();
          }
     
          void BindGrid() 
          {
             MyDataGrid.DataSource = CartView;
             MyDataGrid.DataBind();
          } 
     
       </script>
     
    <body>
     
       <form runat="server">
    
          <h3><font face="Verdana">DataGrid Editing Example</font></h3>
     
          <asp:DataGrid id="MyDataGrid" runat="server"
               BorderColor="black"
               BorderWidth="1"
               CellPadding="3"
               Font-Name="Verdana"
               Font-Size="8pt"
               OnEditCommand="MyDataGrid_Edit"
               OnCancelCommand="MyDataGrid_Cancel"
               OnUpdateCommand="MyDataGrid_Update"
               AutoGenerateColumns="false">
    
             <HeaderStyle BackColor="#aaaadd">
             </HeaderStyle>
     
             <Columns>
                <asp:EditCommandColumn
                     EditText="Edit"
                     CancelText="Cancel"
                     UpdateText="Update"
                     HeaderText="Edit Command Column">
    
                   <ItemStyle Wrap="false">
                   </ItemStyle>
    
                   <HeaderStyle Wrap="false">
                   </HeaderStyle>
    
                </asp:EditCommandColumn>
     
                <asp:BoundColumn HeaderText="Item" ReadOnly="true" DataField="Item"/>
                <asp:BoundColumn HeaderText="Quantity" DataField="Qty"/>
                <asp:BoundColumn HeaderText="Price" DataField="Price"/>
             </Columns>
          </asp:DataGrid>
     
       </form>
     
    </body>
    </html>
    Lungo ma semplice!

    Hey hey, my my Rock and roll can never die!

  5. #5
    SBORONE! :quote:

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2000
    Messaggi
    96
    senti...

    ...vai va.

    Se leggessi bene il mio post magari... che dici .


    So benissimo come fare l'update di singoli record portando il DataGrid in editmode, ma nel mio caso il problema è un altro.

    Ti saluto va.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.