2012-06-14 32 views
16

Bối cảnh:vấn đề Thiết RDLC Datasource vào Object

Tôi đã được giao nhiệm vụ chuyển đổi một ứng dụng cơ sở dữ liệu Access để ASP.Net C# MVC. Đây là ứng dụng MVC đầu tiên của tôi.

Có 10 báo cáo cần chuyển đổi. Chúng tôi đang sử dụng tệp RDLC và reportviewer. Tôi đang sử dụng Visual Studio 2010 với tất cả các bản vá lỗi mới nhất. Chúng tôi đang tìm kiếm cơ sở dữ liệu SQL Server đã được cơ sở dữ liệu Access hiện có điền, do đó cấu trúc bảng được đặt khá nhiều trong đá, nếu không chúng tôi sẽ phải cố gắng chuyển đổi 10 năm dữ liệu.

Tôi đã hoàn tất tất cả trừ hai báo cáo. Báo cáo cuối cùng yêu cầu xử lý nhiều hơn và không chỉ hiển thị dữ liệu từ cơ sở dữ liệu. Cách dễ nhất để làm điều này là tạo một đối tượng C# và thực hiện tất cả các xử lý phía máy chủ, sau đó sử dụng RDLC để hiển thị các kết quả.

Issue

Vấn đề tôi đang gặp là Visual Studio sẽ không nhận ra các đối tượng tôi đã tạo ra như datasources tiềm năng. Mỗi khi tôi cố gắng "thêm tập dữ liệu", nó sẽ trả về "thuật sĩ cấu hình nguồn dữ liệu" và chỉ cung cấp cơ sở dữ liệu SQL Server làm kết nối dữ liệu có thể. Tôi biết có một màn hình tồn tại cho phép bạn chọn một đối tượng làm tập dữ liệu, nhưng tôi không bao giờ thấy màn hình đó.

Dưới đây là các đối tượng (chức năng xử lý xóa do rõ ràng):

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; } 
} 

tôi cũng sẽ sẵn sàng để sử dụng IEnumerable của "TurnAroundVal" như một nguồn dữ liệu, và chỉ cần vượt qua ngày tháng, int, và đôi ở dạng tham số. Hoặc là sẽ làm việc.

Câu hỏi

Có một thiết lập trong Visual Studio 2010 mà tôi đang thiếu để cho phép các nhà thiết kế RDLC để xem các đối tượng mình đã tạo? Tôi có sai khi nghĩ rằng điều này sẽ làm việc với các lớp tôi đã xác định?

trả lời

Tất cả những gợi ý cho là hữu ích, nhưng cuối cùng những gì đã nhận nó làm việc cho tôi là tạo ra một dự án phi web tạm thời trong cùng một giải pháp và tạo ra các RDLC đó. Khi tôi đi để thêm một tập dữ liệu, nó cho thấy "Đối tượng" như là một tùy chọn. Bạn phải thêm một tham chiếu đến dự án web của bạn để các đối tượng của bạn có thể nhìn thấy, nhưng sau đó bạn có thể chọn một đối tượng bạn muốn và sử dụng nó trong RDLC. Sau đó, bạn có thể chỉ cần kéo-thả tệp RDLC vào dự án web của bạn, xóa dự án tạm thời, và bạn tốt để đi. Chỉ cần nhớ rằng bạn phải thêm các nguồn dữ liệu theo cách thủ công trong mã và chúng phải được đặt tên giống như bạn đã chỉ định trong RDLC.

Trả lời

3
  1. Đảm bảo các lớp nằm trong cùng một không gian tên như ứng dụng.
  2. Thử xây dựng ứng dụng trước khi bạn tạo báo cáo
  3. Bắt đầu trình hướng dẫn báo cáo. Trong DataSouce, chọn tên ứng dụng web của bạn.
  4. Trong Tập dữ liệu có sẵn, bạn nên xem Visual Studio diễn giải điều gì là "Phương thức chọn" của bạn. Nếu tất cả là tốt, đây sẽ là TurnArounds.

Bạn có thể cần phải đặt tệp lớp trong thư mục App_Data hoặc App_Code, nhưng tôi không chắc chắn.

Điều này cũng có thể hữu ích.

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

+2

Đã thử tất cả điều đó, nhưng đó vẫn là thông tin tốt. Những gì tôi làm là tạo ra một dự án phi web mới trong cùng một giải pháp, tạo RDLC ở đó, sau đó kéo/thả nó vào dự án web. Có lẽ một cách ít ỏi để làm điều đó, nhưng điều này đã hiệu quả. – War2d2

2

Đặt đối tượng của bạn dưới namespace tương tự nhưng trên một dự án khác nhau mà bạn sau đó tham khảo về dự án giao diện người dùng của bạn.

Đồng thời thử triển khai INotifyPropertyChanged.

2

Visual Studio không nhận ra lớp học của bạn khi bạn chỉ sử dụng thành viên công khai. Khi bạn sử dụng getter và setter thay vào đó, bạn có thể thấy lớp của bạn khi bạn chọn nguồn dữ liệu của bạn.

Có một số trình thuật sĩ khác trong Visual Studio không hoạt động với các thành viên công cộng.

Chúc mừng, Markus

+0

bạn có nói rằng các thuộc tính tự động thực hiện không hoạt động? – Ben

0

Tôi vừa mới đi qua vấn đề này tương tự khi cố gắng tạo RDLC báo cáo trong một dự án ASP.NET MVC trong Visual Studio 2017, vì vậy tôi thêm này như một câu trả lời riêng biệt để làm rõ, đây vẫn là vấn đề vào tháng 1 năm 2018.

Giải pháp của tôi bao gồm dự án thư viện C# và dự án khách hàng MVC.

Thêm báo cáo (bằng cách chọn thêm mục mới, sau đó chọn mục Trình hướng dẫn báo cáo) trong dự án thư viện C# sẽ trả về Trình hướng dẫn báo cáo với Trình hướng dẫn cấu hình nguồn dữ liệu (nơi tôi có thể chọn sử dụng Cơ sở dữ liệu) , dịch vụ hoặc một đối tượng như các nguồn dữ liệu) modally trên đầu trang của nó:

Report Wizard showing Data Source Configuration Wizard

trong khi đó, lựa chọn để thêm một báo cáo mới thuật sĩ mục trong dự án MVC chỉ đưa lên các Report Wizard mà không có nguồn dữ liệu Trình hướng dẫn cấu hình:

Report Wizard without the Data Source Configuration Wizard

Tôi đã thử thêm các lớp đối tượng kinh doanh vào dự án MVC của tôi, biên dịch lại nó và sau đó thêm một báo cáo cho dự án MVC một lần nữa, nhưng tôi vẫn nhận được ảnh chụp màn hình thứ hai, vì vậy nó có vẻ như bạn chỉ không nhận được Trình hướng dẫn cấu hình nguồn dữ liệu khi thêm vào các dự án MVC vì một số lý do.

+1

Cảm ơn bạn đã cập nhật. Tôi đã từ khi chuyển công việc, và chúng tôi không sử dụng RDLC ở đây, vì vậy tôi đã không bám sát tình hình. Vẫn có vẻ như một cách kỳ lạ để thực hiện nó, nhưng có lẽ có một lý do đằng sau nó. – War2d2

Các vấn đề liên quan