Cách đọc số tiền trên CrystalReport với lập trình C#Chào các bác!. E có 1 cái hóa đơn thu học phí sinh viên trong đó hiển thị 1 trường là số tiền.. Việc load dữ liệu lên crystal e dùng d
Trang 1Cách đọc số tiền trên CrystalReport với lập trình C#
Chào các bác!
E có 1 cái hóa đơn thu học phí sinh viên trong đó hiển thị 1 trường là số tiền Việc load dữ liệu lên crystal e dùng dataset, vậy làm thế nào để báo cáo có thể hiển thị số tiền bằng chữ đc ạ? Ví dụ: 1.200.000 VND thì nó sẽ hiển thị là Một triệu hai trăm ngàn đồng Em đang mò mẫm chỗ này mãi mà ko đc.Mong các bác chỉ bảo tận tình
ạ E cảm ơn nhiều
KHÔNG CÓ CHỮ KÝ
#2
19-01-2011, 11:13 PM
timkiemviet.vn
Thành viên mới
Ngày gia nhập: 05 2010 Bài viết: 21
đây là cái bạn cần
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Ham_doi_so_thanh_chu
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static string str = " ";
public static string ToString(decimal number)
{
string s = number.ToString("#");
string[] so = new string[] { "không", "một", "hai", "ba",
"bốn", "năm", "sáu", "bảy", "tám", "chín" };
string[] hang = new string[] { "", "nghìn", "triệu",
"tỷ" };
int i, j, donvi, chuc, tram;
Trang 2bool booAm = false;
decimal decS = 0;
//Tung addnew
try
{
decS = Convert.ToDecimal(s.ToString());
}
catch
{
}
if (decS < 0)
{
decS = -decS;
s = decS.ToString();
booAm = true;
}
i = s.Length;
if (i == 0)
str = so[0] + str;
else
{
j = 0;
while (i > 0)
{
donvi = Convert.ToInt32(s.Substring(i - 1, 1)); i ;
if (i > 0)
chuc = Convert.ToInt32(s.Substring(i - 1, 1)); else
chuc = -1;
i ;
if (i > 0)
tram = Convert.ToInt32(s.Substring(i - 1, 1)); else
tram = -1;
i ;
if ((donvi > 0) || (chuc > 0) || (tram > 0) || (j
== 3))
str = hang[j] + str;
j++;
if (j > 3) j = 1;
if ((donvi == 1) && (chuc > 1))
str = "một " + str;
else
{
if ((donvi == 5) && (chuc > 0))
str = "lăm " + str;
else if (donvi > 0)
str = so[donvi] + " " + str;
}
if (chuc < 0)
break;
else
{
Trang 3if ((chuc == 0) && (donvi > 0)) str = "lẻ " + str;
if (chuc == 1) str = "mười " + str;
if (chuc > 1) str = so[chuc] + " mươi " + str; }
if (tram < 0) break;
else
{
if ((tram > 0) || (chuc > 0) || (donvi > 0)) str = so[tram] + " trăm " + str;
}
str = " " + str;
}
}
if (booAm) str = "Âm " + str;
return str;// = str+ "đồng chẵn";
}
private void button1_Click(object sender, EventArgs e)
{
//textBox2.Text = ToString(decimal.Parse(textBox1.Text)); textBox2.Text = DocTienBangChu(long.Parse(textBox1.Text)," Đồng");
}
private string[] ChuSo = new string[10] { " không", " một", " hai", " ba", " bốn", " năm", " sáu", " bẩy", " tám", " chín" };
private string[] Tien = new string[6] { "", " nghìn", " triệu",
" tỷ", " nghìn tỷ", " triệu tỷ" };
// Hàm đọc số thành chữ
public string DocTienBangChu(long SoTien, string strTail)
{
int lan, i;
long so;
string KetQua = "", tmp = "";
int[] ViTri = new int[6];
if (SoTien < 0) return "Số tiền âm !";
if (SoTien == 0) return "Không đồng !";
if (SoTien > 0)
{
so = SoTien;
}
else
{
so = -SoTien;
}
//Kiểm tra số quá lớn
if (SoTien > 8999999999999999)
{
SoTien = 0;
return "";
}
Trang 4ViTri[5] = (int)(so / 1000000000000000);
so = so - long.Parse(ViTri[5].ToString()) *
1000000000000000;
ViTri[4] = (int)(so / 1000000000000);
so = so - long.Parse(ViTri[4].ToString()) * +1000000000000; ViTri[3] = (int)(so / 1000000000);
so = so - long.Parse(ViTri[3].ToString()) * 1000000000; ViTri[2] = (int)(so / 1000000);
ViTri[1] = (int)((so % 1000000) / 1000);
ViTri[0] = (int)(so % 1000);
if (ViTri[5] > 0)
{
lan = 5;
}
else if (ViTri[4] > 0)
{
lan = 4;
}
else if (ViTri[3] > 0)
{
lan = 3;
}
else if (ViTri[2] > 0)
{
lan = 2;
}
else if (ViTri[1] > 0)
{
lan = 1;
}
else
{
lan = 0;
}
for (i = lan; i >= 0; i )
{
tmp = DocSo3ChuSo(ViTri[i]);
KetQua += tmp;
if (ViTri[i] != 0) KetQua += Tien[i];
if ((i > 0) && (!string.IsNullOrEmpty(tmp))) KetQua +=
",";//&& (!string.IsNullOrEmpty(tmp))
}
if (KetQua.Substring(KetQua.Length - 1, 1) == ",") KetQua = KetQua.Substring(0, KetQua.Length - 1);
KetQua = KetQua.Trim() + strTail;
return KetQua.Substring(0, 1).ToUpper() +
KetQua.Substring(1);
}
// Hàm đọc số có 3 chữ số
private string DocSo3ChuSo(int baso)
{
int tram, chuc, donvi;
string KetQua = "";
tram = (int)(baso / 100);
Trang 5chuc = (int)((baso % 100) / 10);
donvi = baso % 10;
if ((tram == 0) && (chuc == 0) && (donvi == 0)) return "";
if (tram != 0)
{
KetQua += ChuSo[tram] + " trăm";
if ((chuc == 0) && (donvi != 0)) KetQua += " linh"; }
if ((chuc != 0) && (chuc != 1))
{
KetQua += ChuSo[chuc] + " mươi";
if ((chuc == 0) && (donvi != 0)) KetQua = KetQua + " linh";
}
if (chuc == 1) KetQua += " mười";
switch (donvi)
{
case 1:
if ((chuc != 0) && (chuc != 1))
{
KetQua += " mốt";
}
else
{
KetQua += ChuSo[donvi];
}
break;
case 5:
if (chuc == 0)
{
KetQua += ChuSo[donvi];
}
else
{
KetQua += " lăm";
}
break;
default:
if (donvi != 0)
{
KetQua += ChuSo[donvi];
}
break;
}
return KetQua;
}
}
}
#3
19-01-2011, 11:19 PM
Trang 6Thành viên chính thức
Ngày gia nhập: 11 2010 Bài viết: 57
Cho mình hỏi câu này hơi gà mờ chút là đây là viết cho form, vậy để dùng đc cho CrystalReport sử dụng dataset thì m phải làm thế nào?Rất cám ơn bạn đã quan tâm đến câu hỏi của m
KHÔNG CÓ CHỮ KÝ
#4
19-01-2011, 11:23 PM
timkiemviet.vn
Thành viên mới
Ngày gia nhập: 05 2010 Bài viết: 21
uh trên form đó bạn , bạn chuyền được giá trị quá crystalreport thì bạn chuyền chữ qua i vậy
#5
19-01-2011, 11:37 PM
vgc0001
Thành viên chính thức
Ngày gia nhập: 11 2010 Bài viết: 57
M đã xem lại cái form load lên report của m M nhầm với form khác.form này ko sử dụng dataset mà sử dụng theo kiểu click vào 1 dòng dữ liệu, các dữ liệu trên
datagridview sẽ load lên các combo và textbox sau đó truyền qua CrystalReport như thế này
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
Trang 7using System.Windows.Forms;
using System.Collections;
namespace WindowsFormsApplication3
{
public partial class frmHoaDonHP : Form
{
public frmQLHocPhi fParent;
public ArrayList data = new ArrayList();
public frmHoaDonHP()
{
InitializeComponent();
}
private void LoadReport()//object sender, EventArgs e
{
CrystalDecisions.CrystalReports.Engine.TextObject
T = (CrystalDecisions.CrystalReports.Engine.TextObject )
this.PhieuThu.ReportDefinition.Sections[0].ReportObjects["MaHoaDon"]; T.Text = data.ToArray()[0].ToString() ;
T = (CrystalDecisions.CrystalReports.Engine.TextObject )
this.PhieuThu.ReportDefinition.Sections[0].ReportObjects["MaKhoaHoc"]; T.Text = data.ToArray()[1].ToString();
T = (CrystalDecisions.CrystalReports.Engine.TextObject )
this.PhieuThu.ReportDefinition.Sections[0].ReportObjects["MaLop"]; T.Text = data.ToArray()[2].ToString();
T = (CrystalDecisions.CrystalReports.Engine.TextObject )
this.PhieuThu.ReportDefinition.Sections[0].ReportObjects["MaSv"]; T.Text = data.ToArray()[3].ToString();
T = (CrystalDecisions.CrystalReports.Engine.TextObject )
this.PhieuThu.ReportDefinition.Sections[0].ReportObjects["HoTenSv"]; T.Text = data.ToArray()[4].ToString();
T = (CrystalDecisions.CrystalReports.Engine.TextObject )
this.PhieuThu.ReportDefinition.Sections[0].ReportObjects["MaHP"]; T.Text = data.ToArray()[5].ToString();
T = (CrystalDecisions.CrystalReports.Engine.TextObject )
this.PhieuThu.ReportDefinition.Sections[0].ReportObjects["TongHocPhi"]; T.Text = data.ToArray()[6].ToString();
}
private void frmHoaDonHP_Load(object sender, EventArgs e)
{
LoadReport();
}
}
Trang 8đây là sự kiện dataGridview_CellClick
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) {
if (dataGridView1.SelectedRows.Count > 0)
{
list.Clear();
txtMaHoaDon.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString(); list.Add(txtMaHoaDon.Text);
cbbMaKhoa.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
list.Add(cbbMaKhoa.Text);
cbbMaLop.Text = dataGridView1.SelectedRows[0].Cells[2].Value.ToString();
list.Add(cbbMaLop.Text);
cbbMaSv.Text = dataGridView1.SelectedRows[0].Cells[3].Value.ToString();
list.Add(cbbMaSv.Text);
txtTenSv.Text = dataGridView1.SelectedRows[0].Cells[4].Value.ToString();
list.Add(txtTenSv.Text);
cbbMaHocPhan.Text = dataGridView1.SelectedRows[0].Cells[5].Value.ToString(); list.Add(cbbMaHocPhan.Text);
txtTongtien.Text = dataGridView1.SelectedRows[0].Cells[6].Value.ToString(); list.Add(txtTongtien.Text);
}
}
KHÔNG CÓ CHỮ KÝ
#6
20-01-2011, 07:41 AM
hoanghuynh2409
Thành viên nhiệt tình
Ngày gia nhập: 06 2010 Bài viết: 256
Trích dẫn:
Nguyên bản được gửi bởi timkiemviet.vn
đây là cái bạn cần
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
Trang 9using System.Text;
using System.Windows.Forms;
namespace Ham_doi_so_thanh_chu
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static string str = " ";
public static string ToString(decimal number)
{
string s = number.ToString("#");
string[] so = new string[] { "không", "một", "hai", "ba",
"bốn", "năm", "sáu", "bảy", "tám", "chín" };
string[] hang = new string[] { "", "nghìn", "triệu", "tỷ" };
int i, j, donvi, chuc, tram;
bool booAm = false;
decimal decS = 0;
//Tung addnew
try
{
decS = Convert.ToDecimal(s.ToString());
}
catch
{
}
if (decS < 0)
{
decS = -decS;
s = decS.ToString();
booAm = true;
}
i = s.Length;
if (i == 0)
str = so[0] + str;
else
{
j = 0;
while (i > 0)
{
donvi = Convert.ToInt32(s.Substring(i - 1, 1)); i ;
if (i > 0)
chuc = Convert.ToInt32(s.Substring(i - 1, 1));
else
chuc = -1;
i ;
Trang 10if (i > 0)
tram = Convert.ToInt32(s.Substring(i - 1, 1));
else
tram = -1;
i ;
if ((donvi > 0) || (chuc > 0) || (tram > 0) || (j
== 3))
str = hang[j] + str;
j++;
if (j > 3) j = 1;
if ((donvi == 1) && (chuc > 1))
str = "một " + str;
else
{
if ((donvi == 5) && (chuc > 0))
str = "lăm " + str;
else if (donvi > 0)
str = so[donvi] + " " + str;
}
if (chuc < 0)
break;
else
{
if ((chuc == 0) && (donvi > 0)) str = "lẻ " + str;
if (chuc == 1) str = "mười " + str;
if (chuc > 1) str = so[chuc] + " mươi " + str;
}
if (tram < 0) break;
else
{
if ((tram > 0) || (chuc > 0) || (donvi > 0)) str = so[tram] + " trăm " + str;
}
str = " " + str;
}
}
if (booAm) str = "Âm " + str;
return str;// = str+ "đồng chẵn";
}
private void button1_Click(object sender, EventArgs e)
{
//textBox2.Text = ToString(decimal.Parse(textBox1.Text)); textBox2.Text =
DocTienBangChu(long.Parse(textBox1.Text)," Đồng");
}
private string[] ChuSo = new string[10] { " không", " một", "
Trang 11hai", " ba", " bốn", " năm", " sáu", " bẩy", " tám", " chín" }; private string[] Tien = new string[6] { "", " nghìn", " triệu", " tỷ", " nghìn tỷ", " triệu tỷ" };
// Hàm đọc số thành chữ
public string DocTienBangChu(long SoTien, string strTail) {
int lan, i;
long so;
string KetQua = "", tmp = "";
int[] ViTri = new int[6];
if (SoTien < 0) return "Số tiền âm !";
if (SoTien == 0) return "Không đồng !";
if (SoTien > 0)
{
so = SoTien;
}
else
{
so = -SoTien;
}
//Kiểm tra số quá lớn
if (SoTien > 8999999999999999)
{
SoTien = 0;
return "";
}
ViTri[5] = (int)(so / 1000000000000000);
so = so - long.Parse(ViTri[5].ToString()) *
1000000000000000;
ViTri[4] = (int)(so / 1000000000000);
so = so - long.Parse(ViTri[4].ToString()) *
+1000000000000;
ViTri[3] = (int)(so / 1000000000);
so = so - long.Parse(ViTri[3].ToString()) * 1000000000; ViTri[2] = (int)(so / 1000000);
ViTri[1] = (int)((so % 1000000) / 1000);
ViTri[0] = (int)(so % 1000);
if (ViTri[5] > 0)
{
lan = 5;
}
else if (ViTri[4] > 0)
{
lan = 4;
}
else if (ViTri[3] > 0)
{
lan = 3;
}
else if (ViTri[2] > 0)
{
lan = 2;
}
Trang 12else if (ViTri[1] > 0)
{
lan = 1;
}
else
{
lan = 0;
}
for (i = lan; i >= 0; i )
{
tmp = DocSo3ChuSo(ViTri[i]);
KetQua += tmp;
if (ViTri[i] != 0) KetQua += Tien[i];
if ((i > 0) && (!string.IsNullOrEmpty(tmp))) KetQua += ",";//&& (!string.IsNullOrEmpty(tmp))
}
if (KetQua.Substring(KetQua.Length - 1, 1) == ",") KetQua
= KetQua.Substring(0, KetQua.Length - 1);
KetQua = KetQua.Trim() + strTail;
return KetQua.Substring(0, 1).ToUpper() +
KetQua.Substring(1);
}
// Hàm đọc số có 3 chữ số
private string DocSo3ChuSo(int baso)
{
int tram, chuc, donvi;
string KetQua = "";
tram = (int)(baso / 100);
chuc = (int)((baso % 100) / 10);
donvi = baso % 10;
if ((tram == 0) && (chuc == 0) && (donvi == 0)) return
"";
if (tram != 0)
{
KetQua += ChuSo[tram] + " trăm";
if ((chuc == 0) && (donvi != 0)) KetQua += " linh"; }
if ((chuc != 0) && (chuc != 1))
{
KetQua += ChuSo[chuc] + " mươi";
if ((chuc == 0) && (donvi != 0)) KetQua = KetQua + " linh";
}
if (chuc == 1) KetQua += " mười";
switch (donvi)
{
case 1:
if ((chuc != 0) && (chuc != 1))
{
KetQua += " mốt";
}
else
{