2012-06-14 22 views
16

Sfondo:Problemi Impostazione RDLC Origine dati di opporsi

Sono stato incaricato con la conversione di un'applicazione database di Access a ASP.Net C# MVC. Questa è la mia prima applicazione MVC.

Ci sono 10 report che devono essere convertiti. Stiamo usando file RDLC e reportviewer. Sto usando Visual Studio 2010 con tutte le patch più recenti. Ci stiamo collegando a un database SQL Server che è stato popolato dal database Access esistente, quindi la struttura della tabella è praticamente scolpita nella pietra, altrimenti dovremo provare a convertire 10 anni di dati.

Ho completato tutte le relazioni tranne due. I report finali richiedono più elaborazione e non si limitano a visualizzare i dati dal database. Il modo più semplice per farlo sarebbe creare un oggetto C# e fare tutto il lato server di elaborazione, quindi utilizzare RDLC per visualizzare i risultati.

Problema

Il problema che sto avendo è che Visual Studio non riconoscerà gli oggetti che ho creato come potenziali origini dati. Ogni volta che provo a "aggiungere set di dati" richiama la "procedura guidata di configurazione dell'origine dati" e offre solo il database SQL Server come possibile connessione dati. So che esiste uno schermo che ti permette di selezionare un oggetto come set di dati, ma non vedo mai quello schermo.

Ecco gli oggetti (funzioni di elaborazione asportate per chiarezza):

public class TurnAroundVal 
{ 
    // Registration Package information 
    public string dataType { get; set; } 

    // Calculated totals; values only set through constructor or calculation function 
    public int packageCount { get; private set; } 
    public int dayCount { get; set; } 
    public double avgTurnAround { get; private set; } 
    public int upperRange { get; private set; } 
    public int lowerRange { get; private set; } 
} 

public class TurnAroundVals 
{ 
    // Public Variables 
    public IEnumerable<TurnAroundVal> TurnArounds { get; private set; } 
    public DatePass dates { get; set; } 
    public int pkgTotal { get; private set; } 
    public double dayTotal { get; private set; } 
    public double avgAllTurnArounds { get; private set; } 
} 

anche io essere disposti a usare l'IEnumerable di "TurnAroundVal" come origine dati, e passare solo le date, int, e doppie in come parametri. O avrebbe funzionato.

Domanda

È ci una regolazione in Visual Studio 2010 che mi manca per consentire al progettista RDLC per vedere gli oggetti che ho creato? Mi sbaglio persino nel pensare che questo funzionerà con le classi che ho definito?

risposta

Tutti i suggerimenti dati erano disponibili, ma in ultima analisi, ciò che ha a lavorare per me è stato quello di creare un progetto non-web temporanea nella stessa soluzione e creare il RDLC lì. Quando sono andato ad aggiungere un set di dati, mostra "Oggetti" come opzione. Devi aggiungere un riferimento al tuo progetto web in modo che i tuoi oggetti siano visibili, ma poi puoi scegliere quello che vuoi e usarlo nell'RDLC. Dopodiché, puoi semplicemente trascinare il file RDLC nel tuo progetto web, eliminare il progetto temporaneo e sei a posto. Ricorda che devi aggiungere manualmente le origini dati nel codice e devono essere nominate come quelle specificate nell'RDLC.

risposta

3
  1. Assicurarsi che le classi siano nello stesso spazio dei nomi dell'applicazione.
  2. Provare a creare l'applicazione prima di creare il report
  3. Avviare la creazione guidata report. Sotto DataSouce selezionare il nome della propria applicazione web.
  4. In Dataset disponibili si dovrebbe vedere ciò che Visual Studio interpreta come "metodo di selezione". Se tutto va bene, questo dovrebbe essere TurnArounds.

Potrebbe essere necessario inserire il file di classe nella cartella App_Data o App_Code, ma non sono sicuro.

Questo potrebbe anche aiutare.

http://msdn.microsoft.com/en-us/library/ms251692%28v=vs.100%29.aspx

+2

Già provato, ma sono comunque buone informazioni. Quello che ho finito di fare è stato creare un nuovo progetto non web nella stessa soluzione, creando lì il RDLC, quindi trascinandolo/rilasciandolo nel progetto web. Probabilmente c'è un modo meno sfacciato di farlo, ma questo ha funzionato. – War2d2

2

Impostare gli oggetti sotto lo stesso spazio dei nomi ma su un progetto diverso che poi riferimento sul progetto dell'interfaccia utente.

Provare anche ad implementare INotifyPropertyChanged.

2

Visual Studio non riconosce la classe quando si utilizzano solo membri pubblici. Quando invece usi getter e setter, puoi vedere la tua classe quando scegli la fonte dati.

Esistono altre procedure guidate in Visual Studio che non funzionano con membri pubblici.

Cheers, Markus

+0

stai dicendo che le proprietà autoattive non funzionano? – Ben

0

Ho appena incontrato lo stesso problema quando si cerca di creare RDLC riporta in un progetto ASP.NET MVC in Visual Studio 2017, quindi sto aggiungendo questo come una risposta separata per chiarire questo è ancora un problema a gennaio 2018.

La mia soluzione consisteva in un progetto di libreria C# e un progetto client MVC.

Aggiunta di report (scegliendo di aggiungere un nuovo elemento, quindi scegliere una voce Creazione guidata report) nel progetto di libreria C# apre la Creazione guidata report con la Configurazione guidata origine dati (in cui è possibile scegliere se utilizzare un database , servizio o di un oggetto come l'origine dati) modale su di esso:

Report Wizard showing Data Source Configuration Wizard

considerando che, scegliendo di aggiungere un elemento guidata nuovo report nel progetto MVC appena portato la creazione guidata report, senza l'origine dati Configurazione guidata:

Report Wizard without the Data Source Configuration Wizard

Ho provato ad aggiungere classi di oggetti di business nel mio progetto MVC, ricompilazione e poi l'aggiunta di nuovo un report al progetto MVC, ma ho ancora avuto il secondo screenshot, così sembra come se solo non si ottiene la Configurazione guidata origine dati quando si aggiunge a progetti MVC per qualche motivo.

+1

Grazie per l'aggiornamento. Da allora ho spostato i lavori, e qui non usiamo RDLC, quindi non mi sono tenuto aggiornato sulla situazione. Sembra ancora un modo strano per implementarlo, ma forse c'è una ragione dietro di esso. – War2d2

Problemi correlati