2009-03-23 19 views
7

Có cách nào để tìm ra hàng nào hiện tại trong một TDBGrid không?Tìm hàng hiện tại trong TDBGrid của Delphi

+1

Tôi nghĩ rằng bạn cần phải cung cấp một chút làm rõ về câu hỏi của bạn, bạn có nghĩa là hàng trong truy vấn hoặc hàng trong DBGrid? –

Trả lời

5

Tôi không chắc chắn nếu tôi hiểu câu hỏi của bạn, nhưng tôi sẽ cố gắng trả lời và có thể bạn có thể làm rõ nếu đây không phải là những gì bạn đang yêu cầu.

Vì TDBGrid được gắn với nguồn dữ liệu, hàng hiện tại giống với hàng hiện tại trong nguồn dữ liệu. Bạn có thể truy vấn DataSource bằng cách xem xét giá trị khóa chính hoặc thuộc tính RecNo để xác định bản ghi nào là bản ghi hiện tại.

0

Nếu bạn không muốn phụ thuộc vào nguồn dữ liệu để cung cấp số bản ghi và bản ghi hiện tại (ví dụ vì bạn đang sử dụng con trỏ đơn hướng trên máy chủ từ xa), thì kỹ thuật truy cập thuộc tính của kiểm soát lưới cơ bản có thể được sử dụng.

Xem this answer cho câu hỏi StackOverflow tương tự.

+0

Bạn bắt đầu nói chính xác, nhưng liên kết bạn chỉ cho thấy cách nhận số điểm kỷ lục nhưng quan trọng nhất (RecNo hoặc Row hoặc CurrentRow, v.v.) không thể lấy trực tiếp từ lưới. Xin lỗi –

+0

@Carlos: Điều gì khiến bạn không thể viết 'Row: = TDummyGrid (MyDBGrid) .Row' thay vì' RowCount: = TDummyGrid (MyDBGrid) .RowCount'? Một chút suy nghĩ là cần thiết, bạn biết ... – mghie

+0

Vâng ... Tôi muốn hiển thị màu thay thế trên lưới của tôi, nhưng, thuộc tính ROW không phải là "liên tục" giữa các thay đổi con trỏ, tức là, nếu bạn di chuyển con trỏ trên hoặc xuống trên lưới, thay đổi lựa chọn, thuộc tính ROW thay đổi cho TẤT CẢ các hàng có thể nhìn thấy cùng một lúc. Tôi cần một cách để xác định từng dòng riêng biệt, độc lập với hàng đã chọn hiện tại. Bây giờ tôi đang sử dụng RecNo của tập dữ liệu được liên kết, nhưng trên bộ dữ liệu một chiều, thuộc tính này là vô dụng. Như bạn có thể thấy, NHỮNG BÍ MẬT TUYỆT ĐỐI NGH THA LÀ YÊU CẦU, nhưng BẠN là người lười biếng. Xin lỗi ... –

4

Bạn có thể làm điều đó như thế này:

1 - Định nghĩa một lớp địa phương đó là một bản sao của TDBGrid (điều này sẽ cho phép bạn truy cập vào các phương pháp tư nhân):

type 
    THackDBGrid = class(TDBGrid); 

2 - Sau đó, bạn có thể cast đến lớp được xác định tại địa phương của bạn, và kéo từ phương pháp riêng như trong:

function TfrmMain.GetFieldValue(colnum : integer): string; 
begin 
    Result := THackDBGrid(grdMain).GetFieldValue(colnum); 
end; 

Hoặc, để có được hàng #:

function CurrentRowNumber: integer; 
    Result := THackDBGrid(grdMain).Row; 
end; 

Kỹ thuật này cũng hữu ích trong các trường hợp khác, nhưng tôi không thể xác nhận tín dụng. I got it from here.

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