• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Sử dụng Report chuẩn của .NET, tại sao không?

Các bài viết hướng dẫn về Visual Basic .NET và C#

Điều hành viên: tungcan5diop, QUANITGROBEST

ukyokg
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: T.Năm 05/05/2011 10:52 am
Has thanked: 1 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi ukyokg » T.Bảy 07/05/2011 10:16 am

"The Value Expression for the textbox "Textbox38" refers to field 'TourCode' . Report item expressions can only refer to fields within the current dataset scope or, if inside an aggregate, the specified dataset scope"
nó báo như vậy bạn ,source thì mình ko thể đem ra ngoài đc tại của cty, hình thì cái paint của máy mình nó đâu mất tiêu rồi >.<! bạn giúp mình với



Hình đại diện của người dùng
minhquang.qhamy
Thành viên chính thức
Thành viên chính thức
Bài viết: 28
Ngày tham gia: CN 13/02/2011 4:51 pm
Đến từ: Vĩnh Phúc
Has thanked: 1 time
Been thanked: 1 time
Liên hệ:

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi minhquang.qhamy » T.Hai 09/05/2011 10:54 am

Anh cho em hỏi là tạo một file DataSet.xsd để tạo CSDL độc lập trên VS như anh nói thì có gì là lợi thế hơn so với việc kết nối trực tiếp tới CSDL thông qua Data Source?

ukyokg
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: T.Năm 05/05/2011 10:52 am
Has thanked: 1 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi ukyokg » T.Ba 10/05/2011 8:17 am

giúp mình với ban ơi, 1 dataset thì mình làm đc, còn 2 dataset thì bị lỗi >.<

Hình đại diện của người dùng
thuongbat
Guru
Guru
Bài viết: 346
Ngày tham gia: CN 27/04/2008 10:11 am
Has thanked: 4 time
Been thanked: 79 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi thuongbat » T.Ba 10/05/2011 8:25 am

minhquang.qhamy đã viết:Anh cho em hỏi là tạo một file DataSet.xsd để tạo CSDL độc lập trên VS như anh nói thì có gì là lợi thế hơn so với việc kết nối trực tiếp tới CSDL thông qua Data Source?


Đó chỉ là ví dụ thôi. Bạn có thể tạo datasource theo bất cứ cách nào bạn thích và quen dùng.
Rượu gặp tri kỷ ngàn chén thiếu.
Chuyện người không hợp nửa câu thừa.

Hình đại diện của người dùng
thuongbat
Guru
Guru
Bài viết: 346
Ngày tham gia: CN 27/04/2008 10:11 am
Has thanked: 4 time
Been thanked: 79 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi thuongbat » T.Ba 10/05/2011 8:31 am

ukyokg đã viết:"The Value Expression for the textbox "Textbox38" refers to field 'TourCode' . Report item expressions can only refer to fields within the current dataset scope or, if inside an aggregate, the specified dataset scope"
nó báo như vậy bạn ,source thì mình ko thể đem ra ngoài đc tại của cty, hình thì cái paint của máy mình nó đâu mất tiêu rồi >.<! bạn giúp mình với


Nó báo lỗi như vậy có nghĩa là ở cái Textbox38, bạn đã chọn hiển thị trường TourCode. Nhưng cái dataset có chứa TourCode bạn lại không add vào DataSource của Report (hoặc là có add nhưng không dùng đúng tên).

Với thông báo lỗi mà bạn đưa ra, mình chỉ có thể giải thích như vậy. Không có mô tả chi tiết hơn thì mình không giúp được gì.
Về vấn đề bảo mật Source của công ty, mình không yêu cầu phải xem toàn bộ Project của bạn. Nếu vẫn sợ lộ, bạn có thể tạo 1 Project ví dụ có phần Report được thiết kế theo kiểu 2 dataset như bạn nói.
Rượu gặp tri kỷ ngàn chén thiếu.
Chuyện người không hợp nửa câu thừa.

ukyokg
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: T.Năm 05/05/2011 10:52 am
Has thanked: 1 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi ukyokg » T.Tư 11/05/2011 9:52 am

cái Subreport xài như thế nào vậy bạn

karchen
Bài viết: 4
Ngày tham gia: T.Năm 28/04/2011 12:08 pm
Has thanked: 1 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi karchen » T.Tư 11/05/2011 11:41 am

Hi!giúp mình chút nữa
Mình dùng matrix report , trong đó có trường subtotal, mình đã làm đúng như demo ở đây : http://www.gotreportviewer.com/matrices/
nhưng khi lên báo cáo thì dòng total nó ko phải là tổng của các trường trong group mà nó chỉ là giá trị của 1 dòng bất kỳ
ko hiểu tại sao lại như vậy, chỉ giúp mình nhé
Tks
Tập tin đính kèm
matrix1.jpg
design
matrix2.jpg
show report

Hình đại diện của người dùng
thuongbat
Guru
Guru
Bài viết: 346
Ngày tham gia: CN 27/04/2008 10:11 am
Has thanked: 4 time
Been thanked: 79 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi thuongbat » T.Tư 11/05/2011 2:41 pm

SubTotal là tính tổng. Để tính tổng, bạn phải dùng công thức =SUM(Field); Trong hình thiết kế bạn đưa lên không thấy cột nào có giá trị = SUM (..)
nên nó không tính tổng là đúng rồi
Rượu gặp tri kỷ ngàn chén thiếu.
Chuyện người không hợp nửa câu thừa.

karchen
Bài viết: 4
Ngày tham gia: T.Năm 28/04/2011 12:08 pm
Has thanked: 1 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi karchen » T.Tư 11/05/2011 3:34 pm

Trong file demo minh thấy chỉ cần đưa Subtotal vào hàng hoặc cột là nó tự động tính tổng của cột amout theo group rồi chứ mình không thấy chỗ nào phải ghi công thức.
Minh vẫn chưa hiểu lắm. bạn giải thích rõ hơn giúp mình
Tks

ukyokg
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: T.Năm 05/05/2011 10:52 am
Has thanked: 1 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi ukyokg » T.Tư 11/05/2011 4:26 pm

ai chỉ mình cách xài Subreport với >.<!

Hình đại diện của người dùng
thuongbat
Guru
Guru
Bài viết: 346
Ngày tham gia: CN 27/04/2008 10:11 am
Has thanked: 4 time
Been thanked: 79 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi thuongbat » T.Tư 11/05/2011 5:09 pm

karchen đã viết:Trong file demo minh thấy chỉ cần đưa Subtotal vào hàng hoặc cột là nó tự động tính tổng của cột amout theo group rồi chứ mình không thấy chỗ nào phải ghi công thức.
Minh vẫn chưa hiểu lắm. bạn giải thích rõ hơn giúp mình
Tks


Xem mục 2.7 của bài post đầu tiên trong Topic này nhé.
Rượu gặp tri kỷ ngàn chén thiếu.
Chuyện người không hợp nửa câu thừa.

ukyokg
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: T.Năm 05/05/2011 10:52 am
Has thanked: 1 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi ukyokg » T.Năm 12/05/2011 2:43 pm

mình có mẫu báo cáo như thế này, mình muốn mỗi bộ dữ liêu như vậy là 1 trang thì làm sao ban
Tập tin đính kèm
abc.png

ukyokg
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: T.Năm 05/05/2011 10:52 am
Has thanked: 1 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi ukyokg » T.Năm 12/05/2011 5:29 pm

ko hiu sao no' cu' bi trùng dữ liêu bảng nhỏ o duoi, ai giúp mình với >.<

  1. private void Print_DieuTourTong()
  2.         {
  3.             //try
  4.             //{
  5.                 //table dieutour
  6.                 dt_DieuTour_DangKy.Rows.Clear();
  7.                 List<cls_BangDieuTour> list_DieuTour2 = new cls_BangDieuTourBLL().getAll_ByMaTour_Status(tour.MaTour, true);
  8.                 tongChi = list_DieuTour2.Sum(dtour => (dtour.GiaTien * dtour.SoLuong * dtour.HeSo));
  9.                 //sort List_TrietTinh by STT
  10.                 DieuTour_Comparer comparer = new DieuTour_Comparer();
  11.                 list_DieuTour2.Sort(comparer);
  12.                 //fill data
  13.                 IEnumerable<IGrouping<int, cls_BangDieuTour>> query =
  14.                         list_DieuTour2.GroupBy(dieuTour => dieuTour.MaDoiTac, dieuTour => dieuTour);
  15.  
  16.                 cls_DoiTacBLL doitacBLL = new cls_DoiTacBLL();
  17.                 cls_BangDieuTourBLL dieutourBLL = new cls_BangDieuTourBLL();
  18.                 cls_DichVuBLL dvBLL = new cls_DichVuBLL();
  19.                 cls_TourBLL tBLL = new cls_TourBLL();
  20.                 cls_DangKyBLL dkBLL = new cls_DangKyBLL();
  21.                 cls_KhachHangBLL khBLL = new cls_KhachHangBLL();
  22.                 cls_KhachDiTourBLL ktourBLL = new cls_KhachDiTourBLL();
  23.                
  24.                
  25.                 foreach (IGrouping<int, cls_BangDieuTour> doiTacGroup in query)
  26.                 {
  27.                     cls_DoiTac doitac = doitacBLL.getByID(doiTacGroup.Key);
  28.                     String textDoiTac = doitac.TenDoiTac;
  29.                     textDoiTac += " - Phone:" + doitac.Phone;
  30.  
  31.                     String textDichVu = dvBLL.getByID(doitac.MaDichVu).TenDichVu;
  32.                    
  33.                     List<cls_DangKy> listDK_BanTour = dkBLL.getAll_ByMaTour_TinhTrang(tour.MaTour, "Bán Tour");
  34.                     List<cls_DangKy> listDK_HuyTour = dkBLL.getAll_ByMaTour_TinhTrang(tour.MaTour, "Hủy");
  35.                     Double tongThu = listDK_BanTour.Sum(dk1 => dk1.ThanhTien) + listDK_HuyTour.Sum(dk1 => dk1.ThanhTien);
  36.                     doanhthu = tongThu - tongChi;
  37.                     //Object[] rowDieuTour = null;
  38.  
  39.                     foreach (cls_BangDieuTour dieutour in doiTacGroup)
  40.                     {
  41.                         String textGoiDV = dieutour.TenGoiDichVu;
  42.                         if (dieutour.NgaySuDung != "")
  43.                             textGoiDV += "  -  " + dieutour.NgaySuDung;
  44.                         cls_Tour tr = tBLL.getByID(dieutour.MaTour);
  45.                         //cls_DangKy dky = dkBLL.getByID(dieutour.MaTour);
  46.                         Object[] rowDieuTour = null;
  47.  
  48.                         foreach (cls_DangKy dk in listDK_BanTour)
  49.                         {
  50.                             cls_KhachHang kh = khBLL.getByID(dk.KhachDangKy);
  51.                             String khachhang = "";
  52.                             try
  53.                             {
  54.                                 khachhang = kh.HoTen;
  55.                             }
  56.                             catch (NullReferenceException) { khachhang = ""; }
  57.                             List<cls_KhachDiTour> listKtour = ktourBLL.getByMaDangKy(dk.MaDangKy);
  58.                             int int_NLon = listKtour.Count(p => p.LoaiVe == "Người Lớn");
  59.                             int int_TE = listKtour.Count(p => p.LoaiVe == "Trẻ Em");
  60.                             int int_TN = listKtour.Count(p => p.LoaiVe == "Trẻ Nhỏ");
  61.  
  62.  
  63.                             String txtGiaTien = dieutour.GiaTien.ToString("#,###.##");
  64.                             String txtSoTien = (dieutour.GiaTien * dieutour.SoLuong * dieutour.HeSo).ToString("#,###.##");
  65.                             rowDieuTour = new Object[] {dieutour.MaTour,tour.TourCode,dieutour.MaDieuTour,tour.TongVe,
  66.                                                     tour.CodeDi,tour.NgayDi.ToString(),tour.CodeVe,tour.NgayVe.ToString(),strHDV,
  67.                                                     textDichVu, textDoiTac,
  68.                                                     textGoiDV, dieutour.SoLuong, dieutour.DvSlg,
  69.                                                     dieutour.HeSo, dieutour.DvHso, txtGiaTien, txtSoTien, dieutour.GhiChu,tour.VanChuyen,
  70.                                                     dk.MaDangKy,khachhang,
  71.                                                     int_NLon.ToString(),int_TE.ToString(), int_TN.ToString(),
  72.                                                     dk.ThanhTien.ToString("#,###.##"), tongThu.ToString("#,###.##"),doanhthu.ToString("#,###.##"), ""
  73.                                                     };
  74.  
  75.                             dt_DieuTour_DangKy.Rows.Add(rowDieuTour);
  76.  
  77.                         }
  78.  
  79.                         foreach (cls_DangKy dk in listDK_HuyTour)
  80.                         {
  81.                             cls_KhachHang kh = khBLL.getByID(dk.KhachDangKy);
  82.                             String khachhang = "";
  83.                             try
  84.                             {
  85.                                 khachhang = kh.HoTen;
  86.                             }
  87.                             catch (NullReferenceException) { khachhang = ""; }
  88.                             List<cls_KhachDiTour> listKtour = ktourBLL.getByMaDangKy(dk.MaDangKy);
  89.                             int int_NLon = listKtour.Count(p => p.LoaiVe == "Người Lớn");
  90.                             int int_TE = listKtour.Count(p => p.LoaiVe == "Trẻ Em");
  91.                             int int_TN = listKtour.Count(p => p.LoaiVe == "Trẻ Nhỏ");
  92.  
  93.  
  94.                             String txtGiaTien = dieutour.GiaTien.ToString("#,###.##");
  95.                             String txtSoTien = (dieutour.GiaTien * dieutour.SoLuong * dieutour.HeSo).ToString("#,###.##");
  96.                             rowDieuTour = new Object[] {dieutour.MaTour,tour.TourCode,dieutour.MaDieuTour,tour.TongVe,
  97.                                                     tour.CodeDi,tour.NgayDi.ToString(),tour.CodeVe,tour.NgayVe.ToString(),strHDV,
  98.                                                     textDichVu, textDoiTac,
  99.                                                     textGoiDV, dieutour.SoLuong, dieutour.DvSlg,
  100.                                                     dieutour.HeSo, dieutour.DvHso, txtGiaTien, txtSoTien, dieutour.GhiChu,tour.VanChuyen,
  101.                                                     dk.MaDangKy,khachhang,int_NLon.ToString(""),int_TE.ToString("#,###"), int_TN.ToString("#,###"),
  102.                                                     dk.ThanhTien, tongThu.ToString("#,###.##"), doanhthu.ToString("#,###.##"), "Hủy Tour"
  103.                                                     };
  104.                             dt_DieuTour_DangKy.Rows.Add(rowDieuTour);
  105.                         }
  106.                     }
  107.                 }
  108.                 reportViewer1.LocalReport.ReportEmbeddedResource = "QuanLyBanTour.Report.Report1.rdlc";
  109.                 Microsoft.Reporting.WinForms.ReportDataSource newdatasource = new Microsoft.Reporting.WinForms.ReportDataSource("DieuTour_DangKy", dt_DieuTour_DangKy);
  110.                 reportViewer1.LocalReport.DataSources.Add(newdatasource);
  111.  
  112.                 List<ReportParameter> Parameters = new List<ReportParameter>();
  113.                 ReportParameter param = default(ReportParameter);
  114.                 param = new ReportParameter("TongChi", tongChi.ToString("#,###.##"));
  115.                 Parameters.Add(param);
  116.                 reportViewer1.LocalReport.SetParameters(Parameters);
  117.  
  118.                 reportViewer1.RefreshReport();
Tập tin đính kèm
aeo.png

Hình đại diện của người dùng
thuongbat
Guru
Guru
Bài viết: 346
Ngày tham gia: CN 27/04/2008 10:11 am
Has thanked: 4 time
Been thanked: 79 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi thuongbat » T.Năm 12/05/2011 9:15 pm

ukyokg đã viết:mình có mẫu báo cáo như thế này, mình muốn mỗi bộ dữ liêu như vậy là 1 trang thì làm sao ban


Một số control (như Table, Maxtrix, Rectangle, List) có 2 thuộc tính là PageBreakAtStart (bắt Report xuống trang khi bắt đầu gặp control này) và PageBreakAtEnd (xuống trang sau khi hết nội dung của control).
Report của bạn có chiều cao cố định, bạn có thể thử cho hết các Textbox hiện có trong Report của bạn vào trong một cái Rectangle, rồi đặt thuộc tính PageBreakAtEnd của Rectangle là True
Rượu gặp tri kỷ ngàn chén thiếu.
Chuyện người không hợp nửa câu thừa.

Hình đại diện của người dùng
thuongbat
Guru
Guru
Bài viết: 346
Ngày tham gia: CN 27/04/2008 10:11 am
Has thanked: 4 time
Been thanked: 79 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi thuongbat » T.Năm 12/05/2011 9:37 pm

ukyokg đã viết:ko hiu sao no' cu' bi trùng dữ liêu bảng nhỏ o duoi, ai giúp mình với >.<


Mình có thấy bảng thứ 2 trong báo cáo của bạn dữ liệu lặp đi lặp lại, nhưng không biết dữ liệu nguồn của bạn gán vào Report như thế nào?
Rượu gặp tri kỷ ngàn chén thiếu.
Chuyện người không hợp nửa câu thừa.

ukyokg
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: T.Năm 05/05/2011 10:52 am
Has thanked: 1 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi ukyokg » T.Sáu 13/05/2011 8:31 am

đây là nguồn dữ liêu của mình
Tập tin đính kèm
Untitled.png
Untitled.png (9.53 KiB) Đã xem 3202 lần

Hình đại diện của người dùng
thuongbat
Guru
Guru
Bài viết: 346
Ngày tham gia: CN 27/04/2008 10:11 am
Has thanked: 4 time
Been thanked: 79 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi thuongbat » T.Sáu 13/05/2011 8:53 am

Theo ý kiến chủ quan của mình, bảng dữ liệu này của bạn chưa được chuẩn hóa. Bạn nên tách bảng này thành 2 bảng nhỏ. Bảng 1: chứa các thông tin từ "Dịch vụ", "Đối tác".... đến "Ghi chú". Bảng 2 là các thông tin còn lại. CSDL của bạn không chuẩn hóa nên mới dẫn đến báo cáo in ra bị như vậy. Bạn nên tìm hiểu thêm về cách thiết kế và chuẩn hóa CSDL.
Rượu gặp tri kỷ ngàn chén thiếu.
Chuyện người không hợp nửa câu thừa.

ukyokg
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: T.Năm 05/05/2011 10:52 am
Has thanked: 1 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi ukyokg » T.Sáu 13/05/2011 8:56 am

thuongbat đã viết:
ukyokg đã viết:mình có mẫu báo cáo như thế này, mình muốn mỗi bộ dữ liêu như vậy là 1 trang thì làm sao ban


Một số control (như Table, Maxtrix, Rectangle, List) có 2 thuộc tính là PageBreakAtStart (bắt Report xuống trang khi bắt đầu gặp control này) và PageBreakAtEnd (xuống trang sau khi hết nội dung của control).
Report của bạn có chiều cao cố định, bạn có thể thử cho hết các Textbox hiện có trong Report của bạn vào trong một cái Rectangle, rồi đặt thuộc tính PageBreakAtEnd của Rectangle là True


ko dc bạn ơi, nó wa trang khác nhưng trang đó ko có dữ liệu gì hết T-T

ukyokg
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: T.Năm 05/05/2011 10:52 am
Has thanked: 1 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi ukyokg » T.Sáu 13/05/2011 8:58 am

thuongbat đã viết:Theo ý kiến chủ quan của mình, bảng dữ liệu này của bạn chưa được chuẩn hóa. Bạn nên tách bảng này thành 2 bảng nhỏ. Bảng 1: chứa các thông tin từ "Dịch vụ", "Đối tác".... đến "Ghi chú". Bảng 2 là các thông tin còn lại. CSDL của bạn không chuẩn hóa nên mới dẫn đến báo cáo in ra bị như vậy. Bạn nên tìm hiểu thêm về cách thiết kế và chuẩn hóa CSDL.

chia làm 2 bảng khi add report data vào thì nó lại báo như vậy, nên mình mới gộp 2 bảng đó lại >.<
"The Value Expression for the textbox "Textbox38" refers to field 'TourCode' . Report item expressions can only refer to fields within the current dataset scope or, if inside an aggregate, the specified dataset scope"

Hình đại diện của người dùng
thuongbat
Guru
Guru
Bài viết: 346
Ngày tham gia: CN 27/04/2008 10:11 am
Has thanked: 4 time
Been thanked: 79 time

Re: Sử dụng Report chuẩn của .NET, tại sao không?

Gửi bàigửi bởi thuongbat » T.Sáu 13/05/2011 10:34 am

Lỗi trên của bạn mình đã nói rồi. Bạn thiết kế Report sử dụng 2 bảng, nhưng khi add datasource từ code bạn chỉ add 1 bảng, hoặc đã add 2 bảng nhưng mà tên không đúng.

Bạn phải làm thế này:
  1. DataTable Table1 = LayDuLieuChiChoTour();
  2. DataTable Table2 = LayDuLieuThuTuTour();
  3.  
  4. this.ReportViewer1.LocalReport.DataSource.Add( New ReportDataSource ("tên dataset", Table1);
  5. this.ReportViewer1.LocalReport.DataSource.Add( New ReportDataSource ("tên dataset", Table2);
  6.  
Rượu gặp tri kỷ ngàn chén thiếu.
Chuyện người không hợp nửa câu thừa.


Quay về “[.NET] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách