Mang đến cho bạn hành trang là Kiến thức và Kinh nghiệm

Lựa chọn chủ đề bạn quan tâm

Cùng nhau thảo luận về các vấn đề

Hãy theo dõi chúng tôi nếu bạn thấy bổ ích

  1. Hỏi đáp IT
  2. Hỏi nhanh

Lập trình C# - Tính toán trên DataGridView ???

Chào các bạn !
Mình có 1 vấn đề ông các bạn giúp đỡ. Trước giờ mình toàn lập trình và tính toán trên các Control khác chứ chưa bao giờ thao tác trên DataGridView nên hơi gà 
mình có DataGridView với các cột: Mã hàng, Serial, Số lượng, Đơn giá, Chiết khấu, Thành tiền.
Mình muốn sau khi chọn mã hàng, serial rồi nhập Số lượng, chiết khấu thì Thành tiền sẽ được tự tính hoặc khi thay đổi Đơn giá hay Số lượng hay Chiết khấu 
thì Thành tiền sẽ thay đổi theo

code của mình như này nhưng bị báo lỗi

Object reference not set to an instance of an object.

Code:

 for (int i = 0; i < dataGridViewX1.Rows.Count; i++)
            {
                for (int j = 0; j < dataGridViewX1.Columns.Count; j++)
                {
                    if (dataGridViewX1.Rows[i].Cells[j].Value != "" )
                    {
                        int SL = Convert.ToInt32(dataGridViewX1.Rows[i].Cells["Column Name"].Value.ToString());// "Column Name" là tên cột đó - thuộc tính Name của Column ấy
                        decimal Dongia = Convert.ToDecimal(dataGridViewX1.Rows[i].Cells["Column Name"].Value.ToString());
                        int CK = Convert.ToInt32(dataGridViewX1.Rows[i].Cells["Column Name"].Value.ToString());
                        decimal Thanhtien = Convert.ToDecimal(dataGridViewX1.Rows[i].Cells["Column Name"].Value.ToString());
                        if (SL > 0 && Dongia > 0 && CK > 0)
                        {
                            Thanhtien = (SL * Dongia) - GiaCK;
                        }
                    }
                }
            }

Vấn đề 2: insert DataGridview và BD thì mình cũng chưa thử nhưng chắc là cùng dùng

 for (int i = 0; i < dataGridViewX1.Rows.Count; i++)
{
string Mahang = dataGridViewX1.Rows[i].Cells["Column Name"].Value.ToString();
int SL = Convert.ToInt32(dataGridViewX1.Rows[i].Cells["Column Name"].Value.ToString());
........
rồi insert đúng không :D
}
Câu trả lời

- Bạn đã sẵn sàng thảo luận về chủ đề này. Hãy bấm "Viết bình luận", bạn có thể lựa chọn sử dụng tài khoản Facebook hoặc Google++

- Vì sự phát triển của cộng đồng CNTT/CNPM tại Việt Nam!

Unknown user
No responses yet

- Bạn thử coi lại xem cái column name chính xác chưa. Với lại nếu bạn dùng vòng for duyệt qua từng cột thì bạn cũng có thể dùng biến j thay cho colum name.
- Thường khi đổ dữ liệu vào datagridview thì nó sẽ có thêm một dòng trắng cuối cùng nữa, bạn thử cho duyệt vòng for đến RowsCount - 1 xem
- Nếu bạn muốn lúc nhập xong thì nó tính toán luôn cho bạn thì bạn có thể dùng sự kiện RowValidated và RowValidating
Còn cái insert thì bạn có thể làm như thế. 
Lúc lỗi bạn nên thử debug xem nó lỗi chỗ nào rồi tìm cách sửa...
Ý kiến của riêng mình.  Good luck!!!!!!!!
0 Lượt thích

đúng là bị chỗ

int i = 0; i < dataGridViewX1.Rows.Count -1; i++

Mình tính toán OK rồi, mình hỏi thêm cái nữa là khi gõ đơn giá thì format thành 

1,500,000 hoặc 1 500 000 hoặc 1.500.000

luôn. mình đã format Column đó rồi nhưng khi sửa đơn giá thì nó mất format luôn (nó thành 1 dãy số liên tục 1500000)
0 Lượt thích

cho hỏi bạn dùng sự kiện gì để tính Thành tiền vậy ?

0 Lượt thích

Chắc là columchanging hoặc columchanged

0 Lượt thích

Mình dùng CellEndEdit bạn ah.À,bạn nào cho minh hỏi
khi mình nhập Itemcode xong Tab 1 cái thì các thông tin như Item Name, Item Unit...sẽ được tự động điền vào các Column còn trống trên DataGridView, mình dùng CellEndEdit mà nó không nhảy ra (dùng CellValueChanged)
0 Lượt thích

à như thế khi endEdit thì bắt đầu tính toán
bạn có cách nào cho column thành tiền tính toán liên tục ngay cả khi đang gõ chưa xong không ?
ví dụ ô số lượng = 10
gõ "1" vào ô đơn giá => ô thành tiền in kết quả : 10 (1*10)
gõ tiếp "2" => ô thành tiền in kết quả : 120 (12*10)
gõ tiếp "3" => ô thành tiền in kết quả : 1230 (123*10)
0 Lượt thích

mình cũng không chắc nhưng bạn dùng CellValueChange đi

if ...Cells[SL].Value != null && ...Cells[Dongia].Value != null
{
//tính toán
}
0 Lượt thích

CellValueChange cũng chỉ tính toán khi rời focus khỏi ô thôi ah` :(
bạn có cách nào nữa không?
0 Lượt thích

bạn viết vào sự kiện EditingControlShowing, ép kiểu của e.Control thành Textbox (Trường hợp là TextBoxDatagridViewColumn), thêm 2 event vào là TextChanged và Leave vào, giá trị khi tính bạn viết vào sự kiện Textchange con trong sự kiện Leave bạn tháo event Textchanged ra. Xong ! good luck.
0 Lượt thích

Thiệt hok đó, đây là câu hỏi của mình trên diễn đàn cộng đồng C việt mà 
thiệt tình, lần sau coppy nhớ ghi rõ nguồn nha bạn.haizzzzzzzzzzzz
mình đã có câu trả lời, bạn tham khảo nhé
http://sinhvienit.net/forum/url/?http%3A%2F%2Fdiendan.congdongcviet.com%2Fthreads%2Ft224086%3A%3Atin...
0 Lượt thích

Từ khóa tìm kiếm

Câu trả lời mới nhất

Tin tuyển dụng