Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Aiuto su GridView

  1. #1

    Aiuto su GridView

    mi sto studiando un pò la grdiview e ho visto che ci sono un bel pò di controlli interessanti.
    ho messo AllowSorting="True" AutoGenerateDeleteButton="False" AutoGenerateEditButton="True".
    però se ad esempio provo ad ordinare una colonna mi compare un bel errore:
    codice:
    The data source 'ObjectDataSource1' does not support sorting with IEnumerable data. Automatic sorting is only supported with DataView, DataTable, and DataSet.
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
    
    Exception Details: System.NotSupportedException: The data source 'ObjectDataSource1' does not support sorting with IEnumerable data. Automatic sorting is only supported with DataView, DataTable, and DataSet.
    
    Source Error:
    
    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
    
    Stack Trace:
    
    [NotSupportedException: The data source 'ObjectDataSource1' does not support sorting with IEnumerable data. Automatic sorting is only supported with DataView, DataTable, and DataSet.]
       System.Web.UI.WebControls.ObjectDataSourceView.CreateEnumerableData(Object dataObject, DataSourceSelectArguments arguments) +1355095
       System.Web.UI.WebControls.ObjectDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +2829
       System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +21
       System.Web.UI.WebControls.DataBoundControl.PerformSelect() +143
       System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +74
       System.Web.UI.WebControls.GridView.DataBind() +4
       System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +66
       System.Web.UI.WebControls.GridView.OnPreRender(EventArgs e) +26
       System.Web.UI.Control.PreRenderRecursiveInternal() +103
       System.Web.UI.Control.PreRenderRecursiveInternal() +175
       System.Web.UI.Control.PreRenderRecursiveInternal() +175
       System.Web.UI.Control.PreRenderRecursiveInternal() +175
       System.Web.UI.Control.PreRenderRecursiveInternal() +175
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2496
    quello che nn ho capito è il perchè.
    devo creare io gli eventi di sorting?
    e in caso li devo creare nella classe dove faccio l'interrogazione al db o nel code behind della pagina??

  2. #2
    allora forse ho capito.
    ho visto che l'ObjectDataSource accetta i metodi per la modifica e l'eliminazione dei dati.
    questo è il mio gridview:
    codice:
        <asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1" 
            AllowSorting="True" AutoGenerateColumns="False" 
            AutoGenerateDeleteButton="True">
            <Columns>
                <asp:BoundField DataField="id" HeaderText="ID" ReadOnly="True" SortExpression="id" />
                <asp:BoundField DataField="entrate" HeaderText="Entrate" ReadOnly="False" SortExpression="entrate" />
                <asp:BoundField DataField="uscite" HeaderText="Escite" ReadOnly="False" SortExpression="uscite" />
                <asp:BoundField DataField="causale" HeaderText="Causale" ReadOnly="False" SortExpression="causale" />
                <asp:BoundField DataField="data" HeaderText="Data" ReadOnly="False" SortExpression="data" />
            </Columns>
        </asp:GridView>
    questo l'objectdatasource:
    codice:
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" TypeName="Matteo.Connessione"
            SelectMethod="leggiRecord" DeleteMethod="eliminaRecord">
            <DeleteParameters>
                <asp:Parameter Name="id" Type="Int32" />
            </DeleteParameters>
        </asp:ObjectDataSource>
    questa la classe per le query:
    codice:
            public static MySqlConnection getConnection()
            {
                string db = ".........;";
                MySqlConnection conn = null;
                try
                {
                    conn = new MySqlConnection(db);
                    conn.Open();
                }
                catch (MySqlException e)
                {
                    Console.Write(e.Message);
                }
                return conn;
            }
    ......
            public int eliminaRecord(int id)
            {
                string sql = "DELETE FROM movimenti WHERE ID='" + id + "'";
                MySqlConnection conn = null;
                MySqlCommand cmd = null;
                try
                {
                    conn = Connessione.getConnection();
                    cmd = new MySqlCommand(sql, conn);
                    cmd.ExecuteNonQuery();
                }
                catch (MySqlException e)
                {
                    Console.Write(e.Message);
                }
                return id;
            }
    quando clicco sul tasto delete nel gridview nn succede nulla.
    cos'altro mi manca?

  3. #3
    il delete funziona.
    dovevo aggiungere datakeynames al gridview e modificare il datasource.
    nn mi funziona invece l'update anche se l'ho fatto con la stessa logica.
    ho aggiunto AutoGenerateEditButton="True".
    il codice per la modifica è questo:
    codice:
            public void modificaRecord(int id, int entrate, int uscite, string causale)
            {
                MySqlConnection conn = null;
                MySqlCommand cmd = null;
                string sql = "UPDATE movimenti SET entrate=" + entrate + "uscite=" + uscite + "causale='" + causale + "' where id=" + id + "";
                try
                {
                    conn = Connessione.getConnection();
                    cmd = new MySqlCommand(sql, conn);
                    cmd.ExecuteNonQuery();
                }
                catch (MySqlException e)
                {
                    Console.Write(e.Message);
                }
            }
    questo è l'objectdatasource:
    codice:
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DeleteMethod="eliminaRecord"
            SelectMethod="leggiRecord" TypeName="Matteo.Connessione" UpdateMethod="modificaRecord">
            <DeleteParameters>
                <asp:Parameter Name="id" Type="Int32" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="id" Type="Int32" />
                <asp:Parameter Name="entrate" Type="Int32" />
                <asp:Parameter Name="uscite" Type="Int32" />
                <asp:Parameter Name="causale" Type="String" />
            </UpdateParameters>
        </asp:ObjectDataSource>
    quando clicco su update nn succede nulla.

  4. #4
    il problema nell'update era la mancanza delle virgole nella query.

    sono riusciuto a mettere il sorting impostando un datatble nella query per la lettura dei dati:
    codice:
            public System.Data.DataTable leggiRecord()
            {
                string sql = "SELECT * FROM movimenti";
                MySqlConnection conn = Connessione.getConnection();
                MySqlCommand cmd = new MySqlCommand(sql, conn);
                MySqlDataReader reader = cmd.ExecuteReader();
                System.Data.DataTable mytable = new System.Data.DataTable();
                mytable.Load(reader);
                return mytable;
            }
    datatable è in grado in automatico di utilizzare le SortExpression messe nelle varie colonne del gridview.

    mi manca il pager.
    impostato nel gridview e abilitato nell'objectdatasource.
    in avvio però ho questo errore:
    ObjectDataSource 'ObjectDataSource1' could not find a non-generic method 'leggiRecord' that has parameters: maximumRows, startRowIndex.

    come posso impostare questi due parametri??

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.