2015-06-11 78 views
5

Per farla breve, ho questo dataGridView e voglio che la cella [0,0] sia la cella nell'angolo in basso a sinistra della griglia, non nella parte in alto a sinistra della griglia come fa di default.Windows Form: cambia origine della prima cella di dataGridView?

Per esempio, visivamente, se faccio qualcosa di simile:

dataGridView1[0, 0].Value = "a"; 

I get this (sorry not enough reputation to post pictures)

ma mi piacerebbe "a" a comparire, facendo la stessa istruzione, al blu evidenziato fessura, e facendo cose come aggiungere una riga sarebbe aggiunto in cima alla griglia.

Molte grazie in anticipo e saluti

+0

suona come un passante non molto ben pensato idea. Se vuoi aggiungere in primo piano, basta fare un Insert! – TaW

risposta

4

crearne una classe come questa:

public class MyDataGridView : DataGridView 
{ 
    public new DataGridViewCell this[int col, int invertRow] 
    { 
     get 
     { 
      int recordCount = this.RowCount - (this.AllowUserToAddRows ? 2 : 1); 
      return this.Rows[recordCount - invertRow].Cells[col]; 
     } 
     set 
     { 
      int recordCount = this.RowCount - (this.AllowUserToAddRows ? 2 : 1); 
      this.Rows[recordCount - invertRow].Cells[col] = value; 
     } 
    } 
} 

e chiamare che in questo modo:

dataGridView1[0, 0].Value = "a"; 

o se si desidera impostare o ottenere prima cella in alto a sinistra della griglia solo allora è possibile utilizzare la proprietà FirstDisplayedCell.

MSDN: Ottiene o imposta la prima cella attualmente visualizzata in DataGridView; in genere, questa cella si trova nell'angolo in alto a sinistra.

Ad esempio:

dataGridView1.FirstDisplayedCell.Value = "a"; 
+0

Tutto ciò che fa è scambiare gli indici di righe e colonne ... – helrich

+0

Oh mio Dio, scusami, penso che voglia recuperare qualsiasi indice! Ho risolto il più presto – Behzad

+0

ho risolto invertendo l'indice di riga. – Behzad

4

Non c'è modo nativo per fare ciò che si vuole senza estendere la classe, ma è possibile utilizzare metodi di estensione che invertire l'indice di riga per voi:

public static DataGridViewCell FromLowerLeft(this DataGridView dgv, int columnIndex, int invertedRowIndex) 
{ 
    return dgv[columnIndex, dgv.RowCount - invertedRowIndex]; 
} 

Questo può essere usato come

dataGridView.FromLowerLeft(0,0).Value = "a"; 
Problemi correlati