Xử lí hiện dữ liệu form quan hệ 1 nhiều c#, sql

Mọi người cho e hỏi hiện e đang làm bài tập xây dựng app quản lí cửa hàng bán thiết bị điện tử và đang gặp vấn đề về phần hiện dữ liệu từ bảng Phiếu nhập ra bảng Chi tiết phiếu nhập ( 2 bảng này quan hệ 1 - nhiều ) . VD : khi mình tìm mã 1003 , bấm Chi Tiết thì form Chi tiết hiện ra chứa dữ liệu chi tiết liên quan đến mã 1003 đó . Vấn đề của em là khi chọn mã và bấm thì tất cả dữ liệu của mã khác cũng bị hiện theo . Hướng hiểu của em là do thiếu điều kiện để form nhận mã đang tìm nhưng em cũng chưa biết nên làm như nào ạ . Mong mọi người giúp đỡ em cảm ơn

Đấy là code form Chi tiết phiếu nhập của em ạ

      public MaskedTextBox maPhieuNhap;

            public frmChiTietPhieuNhap(MaskedTextBox maPhieuNhap)
            {
                InitializeComponent();
                this.maPhieuNhap = maPhieuNhap;
                init(maPhieuNhap);
            }

            private void init(MaskedTextBox maPhieuNhap)
            {
                lbTitle.Text = "CHI TIẾT PHIẾU NHẬP " + Convert.ToInt32(maPhieuNhap.Text);
                    hienChiTietPhieuNhap();      
                    hienChiTietPhieuNhap_TenHang();
            }

            private static DataTable getChiTietPhieuNhap()
            {
                {
                    string connectionString = ConfigurationManager.ConnectionStrings["db_QuanLyBanThietBiMayTinh"].ConnectionString;
                    string procName = "spGetChiTietPhieuNhap";
                    using (SqlConnection Cnn = new SqlConnection(connectionString))
                    {
                        using (SqlCommand Cmd = new SqlCommand(procName, Cnn))
                        {
                            Cmd.CommandType = CommandType.StoredProcedure;
                            using (SqlDataAdapter Da = new SqlDataAdapter(Cmd))
                            {
                                DataTable t = new DataTable("tblChiTietPhieuNhap");
                                Da.Fill(t);
                                return t;
                            } // Da
                        } // Cmd
                    } // Cnn
                }
            } // getPhieuNhap

            private void hienChiTietPhieuNhap()
            {
                    using (DataTable t = getChiTietPhieuNhap())
                    {
                        DataView v = new DataView(t);
                        dgvChiTietPhieuNhap.AutoGenerateColumns = false;
                        dgvChiTietPhieuNhap.DataSource = v;
                    }
            }

Còn đây là proc getChiTietPhieuNhap bên sql ạ

    create proc spGetChiTietPhieuNhap
    as
    	begin 
    		select tblChiTietPhieuNhap.iMaPhieuNhap, tblMatHang.sTenHang, tblChiTietPhieuNhap.iMaHang, tblChiTietPhieuNhap.iSoLuong, tblChiTietPhieuNhap.fGiaNhap
    		from tblChiTietPhieuNhap, tblMatHang, tblPhieuNhap
    		where tblChiTietPhieuNhap.iMaHang = tblMatHang.iMaHang and tblChiTietPhieuNhap.iMaPhieuNhap = tblPhieuNhap.iMaPhieuNhap
    	end
    go

Bạn đã chạy thử lệnh store procedure trên sql có ra kết quả đúng không?

2 Likes

Em đã chạy proc trên theo sql thì kết quả báo ra hết các dữ liệu với mã tương ứng và nếu thêm điều kiện như dưới

where tblChiTietPhieuNhap.iMaHang = tblMatHang.iMaHang and tblChiTietPhieuNhap.iMaPhieuNhap = tblPhieuNhap.iMaPhieuNhap and tblPhieuNhap.iMaPhieuNhap = 1003 

thì kết quả ra đúng như em muốn ạ, nhưng mà đó lại là add cứng dữ liệu giờ e muốn nó nhận theo mã mình chọn trong phần mềm thì có cách nào không anh?

Store của bạn bị thiếu chưa có lọc theo mã phiếu nên hiển thị hết là phải rồi.
Sửa lại store bằng cách thêm paramater iMaPhieuNhap và sửa lại thành

... and tblPhieuNhap.iMaPhieuNhap = @iMaPhieuNhap

Trong code C# thì pass cái mã phiếu vào store chỗ SqlCommand

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?