2008-11-04 57 views

Trả lời

7

Tôi không nghĩ có cách nào để di chuyển hàng "hàng mới" lên đầu lưới dữ liệu.

Nhưng, điều gì xảy ra nếu bạn để trống hàng trên cùng và khi dữ liệu được điền vào sẽ di chuyển hàng xuống thích hợp? Nói cách khác, tạo hàng "hàng mới" của riêng bạn, chỉ là hàng đầu tiên trong lưới và thêm hàng trống mới ở trên khi chỉnh sửa kết thúc.

Dim myrow = existingDataTable.NewRow 

    existingDataTable.Rows.Add(myrow) 

    adp.Fill(existingDataTable) 
    With DataGridView1 
     .DataSource =existingDataTable 
    End With  
+0

hmm mà có thể làm việc. Tôi không chắc làm thế nào nó sẽ làm việc với với databinding vv, nhưng tôi sẽ phải thử nghiệm một chút với nó. –

1

Bạn có thể gán giá trị tạm thời cho khóa của hàng mới ít hơn tất cả các hàng hiện có không? Sau đó, sắp xếp một DataView bằng khóa đó và ràng buộc khung nhìn vào lưới của bạn.

Nhóm của tôi sử dụng số âm làm id hàng cho đến khi hàng đó được chèn vào cơ sở dữ liệu. Tôi không nhớ các hàng mới của chúng tôi hiển thị ở đầu nhưng chúng tôi cũng không có điều đó như một yêu cầu.

1

Và nếu vẫn thất bại cách hacky sẽ được đặt một DataGridView một dòng riêng biệt so với một hiện có, sao chép cột của nó, và dây lên các sự kiện nộp hàng để thêm dữ liệu vào thấp hơn một :)

4

Nếu bạn không sử dụng các điều khiển bị ràng buộc, dgvItems.Rows.Insert() sẽ cho phép bạn chỉ định vị trí hàng được chèn vào.

Nếu bạn đang sử dụng một DataGridView ràng buộc, mà không có một loại hoạt động, thêm hàng mới cho nguồn dữ liệu trong vị trí mong muốn:

BoundTable.Rows.InsertAt (BoundTable.Rows.NewRow(), RowLocation) ;

Tôi đã tìm thấy một mối quan hệ thú vị, nếu có chỉnh sửa trên hàng hiện tại và hàng không được cam kết với nguồn dữ liệu (tức là bạn mới bắt đầu nhập dữ liệu), có vẻ như cần thiết để di chuyển ô hiện hoạt đến một hàng khác để thực hiện các thay đổi trước khi chèn các hàng.

+0

@Jeff Corder vô tình được đăng trước khi tôi đọc đầy đủ nhận xét của bạn, nhưng sẽ cập nhật cho bất kỳ ai mờ về mô tả của bạn. Tuy nhiên đây là ý kiến ​​của tôi theo cách hiệu quả nhất để làm điều này nếu bạn không muốn làm việc với các mã định danh khóa duy nhất. –

1

Bạn có đang sử dụng sự kiện RowDataBound không? Nếu vậy, bạn có thể kiểm tra xem bạn có đang ràng buộc hàng tiêu đề cột hay không và sau đó thêm mã thích hợp để chèn một hàng ngay bên dưới.

Bằng cách đó, khi hàng nội dung của bạn bị ràng buộc, không có bất kỳ sự nhầm lẫn nào với các chỉ mục mục đang được tham gia, mặc dù tôi khuyên bạn nên sử dụng một số DataKey hoặc một vài thứ trong trường hợp. Ngoài ra, bằng cách sử dụng sự kiện RowDatabound sẽ cho phép bạn có một "chèn hàng" có sẵn khi các trang người dùng đến một khối khác nhau của các hàng trong GridView.

-2

Tôi giả sử bạn có nghĩa là khi bạn muốn thêm hàng mới, bạn muốn hàng thực sự được chèn ở đầu bảng thay vì dưới cùng của bảng như mặc định? Vâng, nếu điều này là như vậy, bạn không phải đối phó với phân loại hoặc giá trị quan trọng; chỉ cần làm như vậy với phương pháp Insert:

'Tạo một hàng mới

Dim tmpRow = New DataGridViewRow

' Điều chỉnh hàng trong một số cách

tmpRow.Height = _cellRectSize

'Thêm hàng để DataGridView (tức dgvEditor) ở phía trên (index = 0)

Me.dgvEditor.Rows.Insert (0, tmpRow)

trình giống như một sự quyến rũ đối với tôi, hy vọng nó sẽ giúp người khác!

1

Như Trong khi-E cho biết, hãy sử dụng Insert thay vì Add. Bằng cách này bạn có thể chỉ định nơi bạn muốn thêm bản ghi mới. Để thêm bản ghi mới trên đầu lưới, chỉ cần sử dụng Insert(0).

DataGridView1.Rows.Insert(0) này sẽ bổ sung thêm một kỷ lục mới trên đầu trang, luôn luôn

DataGridView1.Rows(0).Cells(n).Value = "abc" này sẽ thiết lập giá trị tại cột n

Các vấn đề liên quan