PDA

View Full Version : Cho em hỏi về Datagrid



meodanang
10-08-2005, 08:47
Em viết chhương trình trên win. Có sửdụng datagird để thể hiện dữ liệu
Bây giờ em muốn làm 1 hàng checkbox ngoài cùng đại diện cho mỗi row. NGười dùng đánh dấu vào checkbox nào rồi nhấn button delete thì các row được select sẽ bị del.
Em đã làm được cái checkbox rồi nhưng code để mấy cái checkbox và button delete làm việc thì em chưa làm được
Các bác giúp em cái!!!

songok
10-08-2005, 09:37
THeo tui thi ban dung 1 mang cac checkbox roi viet them ham de bat su kien cho no, khi 1 row cua datagrid bi click thi ta lay ve chi so cua tat cac dong nao ma checkbox co thuoc tinh checked = true, Khi button bi click ta cu duyet mang chua check box do
roi thao tao tren no

meodanang
10-08-2005, 10:27
Em kô biết cái hàm bắt lấy sự kiện click trên cái checkbox như thế nào
Nếu mà bắt được id của các checkbox đó thì dễ rồi có ai giúp em được không?

Csharp_TN
10-08-2005, 11:30
Dùng Datagrid Check Box sau đó khi click button delete dùng vòng for để xóa

vo_danh
10-08-2005, 12:04
Bạn ơi, đâu cần phải làm checkbox làm chi cho nó mệt, trong datasource (thường là dataset)của data grid chỉ cần thêm một cột (datacolumn) kiểu bool chẳng hạn có tên là cKiemTra và trong columnstyles trong tablestyles của datagrid bạn thêm một datagridboolcolumn, đặt thuộc tính Member=cKiemTra,và cho lên phía trước (không cần viết code, design thôi), sau đó datagrid tự động thêm cho mình một cột checkbox ở đầu, rồi trong sự kiện delete bạn bạn chỉ cần kiểm tra giá trị của datacolumn cKiemTra ở mỗi dataRow là true hay false, nếu là true thì xóa cái datarow. Bạn chẳng cần gì đến cái sự kiện của checkbox.
Hơi khó hiểu một chút nhưng thực hiện thì nhanh thôi.

meodanang
10-08-2005, 12:34
Hix em dùng 2005 nên cái bool đó kô có nên em bỏ trực tiếp cái checkbox bằng cách thêm 1 cột(cột này kô có trong csdl,unbound column type là DataGridViewCheckBoxColumn). "DataGridViewCheckBoxColumn1"(đây làm name mà chương trình tự đặt).
Ý em muốn hỏi là làm sao biết cái cột checkbox đó cái nào true cái nào false??

meodanang
11-08-2005, 10:36
Không ai trả lời afh??

vo_danh
12-08-2005, 14:54
Trong VS 2005 beta thì cái DataGrid mình thử rồi, lỗi tè le. Còn cái bạn hỏi là DataGridView mà. Nếu muốn biết một checkbox đã được chọn hay chưa thì bạn dùng cái thuộc tính Value của một cell nào đó.

Ví dụ Giả sử muốn lấy giá trị của cái checkbox nằm ở dòng 0, cột 0: DataGridView1.Rows[0].Cells[0].Value (giá trị này sẽ có kiểu bool)
Chú ý trước đó gọi phương thức DataGridView1.RefreshEdit() để cập nhật giá trị dòng hiện tại nhé.

meodanang
12-08-2005, 21:22
Em làm được rồi nhưng có 1 điều là cái giá trị của check box kô được cập nhật
Ví dụ khi người dùng select rồi sau đó bỏ đi rồi bấm nút xoá thì cái đó vẫn bị xoá đi Có cách nào để cập nhật lại kkô mấy bác??

Em dùng thế này mà kô biết lỗi gì:
Dim i As Integer
DataGridgd.RefreshEdit()
listcheck.Items.Clear()
For i = 0 To DataGridgd.RowCount
If DataGridgd.Rows(i).Cells("check").Value = True Then
listcheck.Items.Add(i)
End If
Next i
Giúp em với

meodanang
14-08-2005, 11:16
Hix trả lời giùm em đi mấy bác ơi!!!!!!

tuongtukhach
19-08-2005, 14:14
Đặt đoạn code trên vào trong sự kiện click nut delete là được rồi.

Các bác cho em hỏi tiếp là em có làm cái nút download nằm ở trong datagrid, em muốn khi nhấn vào nút đó thì sẽ gọi một sự kiện tự động download một tài liệu về nhưng không cho user thấy đường link, vậy sự kiện đó phải viết như thế nào đểnó tự động down tài liệu được, em viết bằng c# mong các bác giúp cho

tuongtukhach
23-08-2005, 15:03
Chẳng bác nào ra tay nghĩa hiệp giúp em cả sao nè trời, giúp dùm em với các bác ơi.

meodanang
24-08-2005, 09:21
:helpsmili :helpsmili :helpsmili :helpsmili :helpsmili :helpsmili :helpsmili
lstcheck.Items.Clear()
datagridgd.ClearSelection()
datagridgd.Update()
For i = 0 To datagridgd.RowCount - 1
If datagridgd.Rows(i).Cells("check").Value = True Then
lstcheck.Items.Add(i)
datagridgd.ClearSelection()
End If
// đoạn code này để add những thứ được đánh dấu vào list
For i = 0 to lstcheck.Items.Count - 1
listgd.Rows.RemoveAt(lstcheck.Items(i))
Next
// còn đoạn này xoá những row có id nằm trong cái list đã add
Em kô hiểu nó bị lỗi gì nữa chán wá

:helpsmili :helpsmili :helpsmili :helpsmili :helpsmili :helpsmili :helpsmili

meodanang
24-08-2005, 14:28
Choài kô ai trả lời giúp em hả??

vo_danh
25-08-2005, 20:17
For i = 0 to lstcheck.Items.Count - 1
listgd.Rows.RemoveAt(lstcheck.Items(i))
Next

Đoạn code của bạn có vấn đề:
Vì khi bạn Xoá một dòng thì số dòng sẽ bị giảm đi 1, vì vậy lần gọi RemoveAt lần thứ hai trở đi sẽ sai. Dễ hiểu mà!

meodanang
26-08-2005, 07:22
Vậy cách giải quyết là sao bác??

meodanang
27-08-2005, 10:15
Giúp em nốt đê các bác ơi!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !

Cận
27-08-2005, 22:16
For i = 0 to lstcheck.Items.Count - 1
listgd.Rows.RemoveAt(lstcheck.Items(0))
Next