2011-03-02 20 views

cevap

7

Bu olayı halletmek gerekeni yapar mı? Statik bir int değişken Do -

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.columndisplayindexchanged.aspx

+5

emin değilim. Bu olay, veri tablosunun yeniden bağlanması vb. Gibi diğer birçok durumda da tetiklenecektir. – Robinson

+1

Bu, kullanıcının sütunları yeniden sıraladığı her seferinde en az iki kez ateşlenir. Başlangıç ​​noktası için, bir kez bitiş noktası için ve aradaki her sütun için bir kez. Etkinlikle yaptığınız şeye bağlı olarak bu çok fazla yük olabilirdi. Eğer 'ColumnDisplayIndexChanged' olayını nasıl kullanılacağı hakkında bazı ayrıntıları eğer – Wayne

0

Tam olarak neyi başarmaya çalıştığınızı bilmiyorum. Özel bir sütun sıralama davranışı eklemek isterseniz, this tutorial on customizable column sorting'a bakabilirsiniz.

Temel olarak, orada MouseDown olayını yakalarsınız ve kullanıcının bir sütun üstbilgisine tıklayıp basmadığına bakarsınız. Eğer yaptıysa ve kendisine atanan bir olay varsa, bu gerçekleştirilebilir.

3

Ben

1 ... öneririm.

2 - :: ColumnHeaderMouseClick işleyicisinde bu değişkeni Etkiler

3 - işleyici :: sıralama bu değişkenin ile çizgiyi seç

Örnek:

private static int idRequetePourtriage = -1; 


    private void dgvRequete_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
    { 
     if (dgvRequete.SelectedRows.Count > 0) 
      idRequetePourtriage = Convert.ToInt32(dgvRequete.SelectedRows[0].Cells[TEXT_colNameIdRequete].Value.ToString()); 

    } 

    private void dgvRequete_Sorted(object sender, EventArgs e) 
    { 
     desactivateGridSelected(); 


     int rowCount = 0; 
     Boolean isFind = false; 

     while (rowCount < dgvRequete.Rows.Count && !isFind) 
     { 
      if (idRequetePourtriage == Convert.ToInt32(dgvRequete.Rows[rowCount].Cells[TEXT_colNameIdRequete].Value.ToString())) 
      { 
       isFind = true; 
       activateGridSelected(); 

       dgvRequete.Rows[rowCount].Selected = true; 
      } 
      rowCount++; 
     } 

     if (!isFind) 
     { 
      activateGridSelected(); 
     } 
    } 
1

Kullanım ColumnDisplayIndexChanged olay

+0

yararlı olacaktır – cpburnz

5

"Use ColumnDisplayIndexChanged" olayı doğru olanı gibi görünüyor. Benim için çalıştı. (Ben bunun için temsilcisi vardı Yorum eklemek istiyorum.)

Bir olay işleyicisi o olay için o sütun için yeni değer yansıtan e.Column içerecektir. Aradığınız özellik DisplayIndex. Olayın, DisplayIndex'in değiştiği her sütun için tetikleneceğini unutmayın.

olay başlangıçta ateş edeceği yana
Private Sub data_ColumnDisplayIndexChanged(sender As Object, e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles data.ColumnDisplayIndexChanged 

    Debug.Print(e.Column.DisplayIndex & vbTab & e.Column.Name) 

End Sub 

(birden çok kez), size sütun eklerken veya yeniden tetiklenmesini önlemek için mantık çeşit eklemek isteyebilirsiniz: vb.net olarak

önceki ayarlara dayalı sütunları düzenlenmesi: başlangıç ​​kodu yapılır

Private Sub dataAnts_ColumnDisplayIndexChanged(sender As Object, e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles dataAnts.ColumnDisplayIndexChanged 

    If bSortingColumns = False Then 
     Debug.Print(e.Column.DisplayIndex & vbTab & e.Column.Name) 
    End If 

End Sub 

Veya bir olay işleyicisi ekleyin programlı sonra. değil mi bu doğru olarak işaretlenmiş neden

The MSDN link.