8

Tôi có dữ liệu bị ràng buộc DataGridView trong ứng dụng dành cho máy tính để bàn với các cột có bộ thuộc tính ToolTipText, nhưng không có đầu công cụ nào được hiển thị khi tôi di chuột qua chế độ xem lưới (ô hoặc tiêu đề ô).DataGridView ToolTipText không hiển thị

Thuộc tính ShowCellToolTips của chế độ xem lưới là true và tôi đã xác minh bằng cách sử dụng các điểm ngắt mà nó không thay đổi theo chương trình trước khi tôi di chuột qua.

Tôi đã thử tạo một trình xử lý sự kiện CellToolTipTextNeeded để xem văn bản mẹo công cụ là gì, nhưng trình xử lý sự kiện không bao giờ được gọi.

Có điều gì tôi đã bỏ lỡ không?

Cảm ơn, Rob

Edit: Chúng tôi đang sử dụng framework 2.0.

+0

Tôi biết đây là một câu hỏi cũ, nhưng hack một công việc xung quanh với các thành phần ToolTip thực sự là câu trả lời đúng? Chúng tôi đang gặp sự cố tương tự với chú giải công cụ cột/ô không hiển thị. Điều này có vẻ giống như một lỗi trong DataGridView mà nên được cố định. – Yoopergeek

+0

@Yoopergeek Tôi đồng ý, đó là lỗi. Tôi nói với nó là cố định trong Framework 3.0, nhưng chúng tôi không ở một vị trí để nâng cấp do những hạn chế trong trình cài đặt của chúng tôi. –

+1

Tôi đang sử dụng 3,5 ... vẫn không cố định. ;) – Yoopergeek

Trả lời

2

Chúng tôi đã kết thúc bằng một widget ToolTip và CellMouseEnter, CellMouseLeave sự kiện để hiển thị nó một cách thích hợp. Không tối ưu, nhưng nó hoạt động xung quanh hành vi kỳ quặc mà chúng tôi gặp phải.

0

Tôi không biết liệu mẹo này có phải là giải pháp cho vấn đề cụ thể của bạn hay không, nhưng bạn có sử dụng SP1 của VS2008 không? Gói dịch vụ này giải quyết nhiều vấn đề khác nhau, như tôi đã phát hiện ra.

+0

@WunderWuzzi. Không, chúng tôi chưa cài đặt SP1. Tôi sẽ nói chuyện với lãnh đạo kỹ thuật về dự án để xem đó có phải là điều chúng tôi có thể thử không. Tôi sẽ cập nhật vấn đề sau đó. Cám ơn rất nhiều. –

8

Nó xuất hiện từ câu hỏi của bạn mà bạn đặt văn bản chú giải công cụ của các cột. Văn bản chú giải công cụ cột chỉ xuất hiện khi thả nổi trên tiêu đề. Để hiển thị văn bản tooltip trên các tế bào bạn phải hookup sự kiện CellToolTipTextNeeded và thiết lập giá trị của e.ToolTipText trong args sự kiện

+0

Cảm ơn bạn đã trả lời, nhưng như đã nêu trong câu hỏi: a) văn bản tooltip không hiển thị trên tiêu đề hoặc b) xử lý sự kiện CellToolTipTextNeeded không bắn –

+0

Nó làm việc cho tôi: private void dgvPlatypus_CellToolTipTextNeeded (object sender, DataGridViewCellToolTipTextNeededEventArgs e) {e.ToolTipText = "j. cutworm là một punk"; } –

+0

CellToolTipTextNeeded không bị sa thải. Bất kỳ mẹo nào cho nó? – Kenta

4

Thử sử dụng thuộc tính Cell.ToolTipText. Bạn có thể sẽ cần để lặp các hàng của DataGridView và thiết lập các tooltips bằng tay:

For Each row As DataGridViewRow In Me.DataGridView.Rows 
    Me.DataGridView("MyCol", row.Index).ToolTipText = "MyToolTipText" 
Next 

Có thể không phù hợp với một DataGridView ràng buộc với rất nhiều hàng nhưng làm việc thành công cho tôi với một DataGridView không ràng buộc với một vài trăm hàng. Hi vọng điêu nay co ich.

+0

Đây là câu trả lời đúng. Từ MSDN: "Sự kiện CellToolTipTextNeeded xảy ra chỉ khi DataGridView kiểm soát thuộc tính DataSource được đặt hoặc thuộc tính VirtualMode của nó là đúng". –

1

Tôi hiện đang trải qua cùng một ứng dụng trên Framework 3.5. Có vẻ như thuộc tính DataSource cần được đặt để có được sự kiện CelToolTipTextNeeded được kích hoạt.

+0

@sindre Trong trường hợp của tôi, DataSource chắc chắn được thiết lập, nếu không sẽ không có dữ liệu trong GridView của tôi. –

3

Khi tôi thêm chế độ xem dữ liệu với cột đơn (trống) vào biểu mẫu, hãy thêm văn bản vào thuộc tính ToolTipText cho cột đó và đảm bảo rằng thuộc tính ShowCellToolTips cho chế độ xem dữ liệu được đặt thành True, tôi nhận được cửa sổ bật lên tooltip khi tôi di chuột qua tiêu đề của cột đó. Điều này dường như mâu thuẫn với những gì đã được nêu trong câu hỏi ban đầu, nhưng trong thử nghiệm của tôi lưới không bị ràng buộc dữ liệu. Không chắc chắn nếu điều đó tạo ra sự khác biệt. Tuy nhiên, trên một dự án với một datagridview ràng buộc dữ liệu, tôi chỉ sử dụng một thành phần ToolTip:

(1) Thêm một thành phần ToolTip vào biểu mẫu của bạn.
(2) Đặt thuộc tính ToolTip on toolTip1 (hoặc tên tương đương cho thành phần ToolTip) cho chế độ xem dữ liệu của bạn thành bất kỳ văn bản nào bạn muốn hiển thị.
(3) Đặt thuộc tính ShowCellToolTips của datagridview thành Sai.
(4) Viola! Hoạt động như mong đợi.

0

Tôi tìm thấy bài viết này đang tìm kiếm trợ giúp về cách đặt chú giải công cụ mỗi hàng.

Tôi chỉ muốn xác nhận rằng việc xử lý sự kiện CellToolTipText hoạt động cho tôi trong VS2008 SP1.

Đối với những người bạn của những người tự hỏi như thế nào thiết lập các văn bản đến một giá trị từ DataRow nằm bên dưới, điều này có thể có ích:

private void myDGV_CellToolTipTextNeeded(object sender, DataGridViewCellToolTipTextNeededEventArgs e) 
    { 
     // This is used to set tooltiptext for individual cells in the grid. 
     if (e.ColumnIndex == 2) // I only want tooltips for the second column (0-based) 
     { 
      if (e.RowIndex >= 0) // When grid is initialized rowindex == 0 
      { 
       // e.ToolTipText = "this is a test."; // static example. 

       DataRowView drv = ((DataGridView)sender).Rows[e.RowIndex].DataBoundItem as DataRowView; 
       MyTableRowClass theRow = drv.Row as MyTableRowClass; 
       e.ToolTipText = theRow.Col1 + "\r\n" + theRow.Col2; 
      } 
     } 
    } 
+0

Đây có thể là cách tốt hơn để kiểm tra cột đúng. Nó sẽ vẫn hoạt động nếu bạn sắp xếp lại thứ tự các cột. nếu (myDGV.Columns [e.ColumnIndex] .Name == "MyColumn") – shindigo

1

Tôi đã có một vấn đề simular nhưng đã có thể sửa chữa nó bằng cách thiết lập ShowCellToolTip thành true trên DataGridView của tôi. Một khi tôi đã làm điều đó tôi đã có thể gửi mã sau đây và tất cả mọi thứ đã làm việc tốt.

tableDocTypes.ShowCellToolTips = true; 
tableDocTypes.Rows[i].Cells[columnFormCabinet.Index].ToolTipText = "Cabinet is not defined on the optical server."; 
0
  1. thiết lập thuộc tính ShowCellToolTips của DataGridView của bạn để false
  2. Đặt mã này trong của DataGridView bạn CellMouseEnter kiện

    private void dgv_CellMouseEnter(object sender, DataGridViewCellEventArgs e) 
    { 
        if (!(dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].GetType() == typeof(DataGridViewImageCell))) return; 
        System.Windows.Forms.ToolTip tlp = new System.Windows.Forms.ToolTip(); 
        tlp.SetToolTip(dgv, "Your ToolTipText"); 
    } 
    
2

Để hiển thị tooltip của tế bào lưới, bạn có thể sử dụng trình xử lý sự kiện này "CellToolTipTextNeeded ". Tham khảo mã dưới đây Snippet,

this.dataGridView1.ShowCellToolTips = true; 
this.dataGridView1.CellToolTipTextNeeded += dataGridView1_CellToolTipTextNeeded; 

void dataGridView1_CellToolTipTextNeeded(object sender, DataGridViewCellToolTipTextNeededEventArgs e) 
{ 
    if (e.ColumnIndex >= 0 && e.RowIndex >= 0)   
    { 
     e.ToolTipText = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); 
    } 
} 
1

Set sở hữu ShowCellToolTips datagridview False

+0

Đối với .Net 4.5, đây là công trình – Great88

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