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

    Richiamare classe in objectdatasource

    sono agli inizi con asp.net.
    ho creato una classe per la connessione:
    codice:
        public class Class1
        {
            public List<string> getMoves()
            {
                string db = "Database=banca;Data Source=host;User Id=user;Password=pass;";
                string sql = "select * from movimenti";
                MySqlConnection conn = new MySqlConnection(db);
                MySqlCommand cmd = new MySqlCommand(sql, conn);
                conn.Open();
                MySqlDataReader reader = cmd.ExecuteReader();
                List<string> row = new List<string>();
                while (reader.Read())
                {          
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        row.Add(reader.ToString());
                    }
                }
                return row;
            }
        }
    a questo punto devo richiamare questa classe dentro ObjectDataSource per poi visualizzare il tutto tramite GridView.
    ma come faccio a fare questo??
    codice:
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod=" "></asp:ObjectDataSource>

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    116
    Mmmh, secondo me l'approccio è sbagliato.

    Più che richiamare quella classe dovresti passargli l'oggetto row.

    Anche se io invece di usare un objectDataSource farei direttamente da codebehind:

    codice:
    NomeGridView.dataSource = NomeOggettoDiTipoClass1.getMoves()
    In modo da passare direttamente al gridView l'oggetto da usare come datasource

  3. #3
    fatto:
    codice:
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="getMoves"
            TypeName="Matteo.Class1"></asp:ObjectDataSource>

  4. #4
    Originariamente inviato da Verce
    Mmmh, secondo me l'approccio è sbagliato.

    Più che richiamare quella classe dovresti passargli l'oggetto row.

    Anche se io invece di usare un objectDataSource farei direttamente da codebehind:

    codice:
    NomeGridView.dataSource = NomeOggettoDiTipoClass1.getMoves()
    In modo da passare direttamente al gridView l'oggetto da usare come datasource
    e questo la faresti direttamente dentro la classe della connessione???

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    116
    No, io lo farei nel code-behind della pagina, all'evento init, ma comunque direi che la tua soluzione è comunque ottima

  6. #6
    però cos' nn mostra nessun risultato.
    ho cmq bisogno di un objectdatasource giusto??
    io lo avevo impostato dal toolbox, ma penso che cos' debba impostarlo nel code-behind giusto?

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    116
    Direi che nel code behind non ti mostra il risultato perchè poi bisogna dirgli:

    codice:
    NomeDataGrid.databind()
    In questo modo lui si collega al DataSource che gli hai passato.
    Però ripeto, nel modo in cui l'hai fatto tu va più che bene, è solo questione di abitudini.

  8. #8
    capito...
    diciamo che per ora preferisco il mio metodo perchè mi è un pò più chiaro.
    poi proverò anche il tuo.
    ho però un problema:
    codice:
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1">
            <Columns>
                <asp:BoundField DataField="id" HeaderText="id" ReadOnly="True" SortExpression="Length" />
                <asp:BoundField DataField="entrate" HeaderText="Entrate" ReadOnly="True" SortExpression="Length" />
                <asp:BoundField DataField="uscite" HeaderText="Escite" ReadOnly="True" SortExpression="Length" />
                <asp:BoundField DataField="causale" HeaderText="Causale" ReadOnly="True" SortExpression="Length" />
                <asp:BoundField DataField="data" HeaderText="Data" ReadOnly="True" SortExpression="Length" />
            </Columns>
        </asp:GridView>
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="getMoves"
            TypeName="Matteo.Class1"></asp:ObjectDataSource>
    mi restituisce una pagina di errore che nn capisco:
    codice:
    A field or property with the name 'id' was not found on the selected data source.
    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.Web.HttpException: A field or property with the name 'id' was not found on the selected data source.
    
    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:
    
    [HttpException (0x80004005): A field or property with the name 'id' was not found on the selected data source.]
       System.Web.UI.WebControls.BoundField.GetValue(Control controlContainer) +1763899
       System.Web.UI.WebControls.BoundField.OnDataBindField(Object sender, EventArgs e) +67
       System.Web.UI.Control.OnDataBinding(EventArgs e) +91
       System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +92
       System.Web.UI.Control.DataBind() +15
       System.Web.UI.Control.DataBindChildren() +201
       System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +101
       System.Web.UI.Control.DataBind() +15
       System.Web.UI.WebControls.GridView.CreateRow(Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, Boolean dataBind, Object dataItem, DataControlField[] fields, TableRowCollection rows, PagedDataSource pagedDataSource) +166
       System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +3896
       System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +66
       System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data) +14
       System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +128
       System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +33
       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.CompositeDataBoundControl.CreateChildControls() +75
       System.Web.UI.Control.EnsureChildControls() +102
       System.Web.UI.Control.PreRenderRecursiveInternal() +42
       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
    il codice per la connessione al db è quello sopra.
    quello che nn capisco è se sbaglio nella connessione o nel gridview.
    fatto sta che i campi di quel db sono quelli.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    116
    Mi sembra che il tuo codice crei una lista in cui in realtà non c'è distinzione tra gli elementi
    Per capirci, se nella tua tabella c'è:

    id------|entrate--|uscite--|causale--|data
    1------|200-----|--------|boh------|12/05/2010
    2------|10------|400-----|bohboh---|13/05/2010

    il contenuto nella tua row è il seguente:
    1
    200
    null
    boh
    15/05/2010
    2
    10
    400
    bohboh
    13/05/2010

    cioè una lista di elementi ma senza un'indicazione di qual'è la colonna di appartenenza, mentre invece suppongo il gridView abbia un item template che si aspetta determinati campi
    A questo punto invece di creare l'oggetto row prova a fare un return solo con l'oggetto reader che invece al suo interno ha tutte le informazioni necessarie al gridView(se la query è corretta). Ricordati di cambiare il tipo di dato restituito dal metodo

  10. #10
    codice:
        public class Class1
        {
            public MySqlDataReader getMoves()
            {
                string db = "Database=banca;Data Source=62.94.208.157;User Id=root;Password=fermat85;";
                string sql = "SELECT * FROM movimenti";
                MySqlConnection conn = new MySqlConnection(db);
                MySqlCommand cmd = new MySqlCommand(sql, conn);
                conn.Open();
                MySqlDataReader reader = cmd.ExecuteReader();
                return reader;
            }
        }
    così funziona.
    grazie!!!

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.