2013-04-08 12 views
14

Nei miei WinForms ho DataGridView. Volevo selezionare l'intera riga in una volta, quindi ho impostato SelectionMode come FullRowSelect. E ora ho un problema, perché all'inizio il mio modulo sottolinea la prima riga (l'insieme delle righe selezionate è vuoto, la prima riga non è selezionata ma solo sottolineata). Ho provato molte cose, come ad esempio:DataGridView senza riga selezionata all'inizio

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
    { 
     dataGridView1.ClearSelection(); 
    } 

E tutto fallito, perché in realtà non v'è alcuna selezione.

Come posso liberarmi di questa sottolineatura?

Grazie per qualsiasi aiuto!

+1

Se si sta aggiungendo manualmente le righe, Cancella selezione dopo l'aggiunta di tutte le righe. – Akanksha

risposta

13

Purtroppo nessuna di queste risposte mi ha aiutato, ma ho trovato altra soluzione. Invece di selezione in grado Mi limito a nasconderlo con questo pezzo di codice:

dataGridView1.DefaultCellStyle.SelectionBackColor = dataGridView1.DefaultCellStyle.BackColor; 
dataGridView1.DefaultCellStyle.SelectionForeColor = dataGridView1.DefaultCellStyle.ForeColor; 

Quindi, se qualcuno vuole solo nascondere la selezione è un lavoro andando abbastanza bene.

Saluti :)

+3

Non proprio LA soluzione però ... – miguelmpn

12

questo funziona per me:

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    dataGridView1.Rows[0].Selected = false; 
} 
+1

Sfortunatamente non funziona. Come ho detto la prima riga non è selezionata, è solo sottolineata. –

+0

Che finestre hai? –

+0

Ciò è probabilmente dovuto alla riga che ha il focus. Potresti provare a concentrarti su un controllo diverso con il metodo 'focus()'. –

1

provare a impostare DataGridView.AllowUserToAddRows = false nel costruttore dopo InitializeComponent().

+0

Funziona :) L'unica cosa che devo considerare è scrivere questa riga di codice nell'evento Mostrato. Quando ho scritto questo nel mio costruttore, non è successo nulla. – FrenkyB

0

questo lavoro per me per la selezione chiara su databind

Protected Sub GridCancel_DataBinding(sender As Object, e As EventArgs) Handles GridCancel.DataBinding 
    GridCancel.SelectedIndex = -1 

End Sub 
+1

È possibile che funzioni ... Ma qui la domanda è relativa a Winforms 'Datagridview', non a ASP.NET' GridView', quindi la risposta non è appropriata. – Chris

11

Basta mettere dataGridView1.ClearSelection(); nell'evento Load del modulo.

+1

Funziona per me. Grazie. –

0

È possibile chiamare dataGridView.ClearSelection() metodo all'interno Form_Load come questo ...

private void Form1_Load(object sender, EventArgs e) 
    { 
    // You will get selectedCells count 1 here 
    DataGridViewSelectedCellCollection selectedCells = dataGridView.SelectedCells; 
    // Call clearSelection 
    dataGridView.ClearSelection(); 
    // Now You will get selectedCells count 0 here 
    selectedCells = dataGridViewSchedule.SelectedCells; 
    } 
1

Si dovrebbe cercare di mettere in evento Indicato datagridView.ClearCelection() e anche datagridView.CurrentCell=null e, per esempio, se si desidera selezionare riga per eliminazione o modifica di informazioni solo fare if(datagridView.CurrentCell==null){ MessageBox.Show("You must select row");} funziona per me

0

l'evento per impostare per disabili riga selezionata all'inizio è questo, e gestire una bandiera per fermare il clearSelection

private void dataGridView_SelectionChanged(object sender, EventArgs e) 
{ 

    if (FLAG==true) 
    { 
     dataGridView.ClearSelection(); 
     FLAG=false; 
    } 
} 
2

Prova Ciò può essere utile

private void dgv_order_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) 
     { 
      dgv_order.CurrentCell.Selected = false; 
      dgv_order.ClearSelection(); 
     } 
0

A volte, quando si ricarica il modulo senza chiudere il programma, la prima fila sarà potrebbe essere evidenziato. Ma non sarà selezionato, e otterrai -1 per l'indice di riga selezionato.

È possibile farlo solo in questo modo:

'1. store default styles when form is loading: 
Public Class aRoots 
Dim df1, df2, df3, df4 As Color 
Private Sub aRoots_Load(sender As Object, e As EventArgs) Handles Me.Load 
     df1 = DGV_Root.DefaultCellStyle.SelectionBackColor 
     df2 = DGV_Root.DefaultCellStyle.BackColor 
     df3 = DGV_Root.DefaultCellStyle.SelectionForeColor 
     df4 = DGV_Root.DefaultCellStyle.ForeColor 
...... 
'2. change cell styles when interacting with datagridview: 
Private Sub LoadRoot() 
     For i = 0 To 5 
       DGV_Root.Rows.Add() 
       For j = 0 To 3 
        DGV_Root.Item(j, i).Value = ... 
       Next 
      Next 
     'DGV_Root.ClearSelection() ==> instead of this use 2 lines below 
     DGV_Root.DefaultCellStyle.SelectionBackColor = df2 
     DGV_Root.DefaultCellStyle.SelectionForeColor = df4 
    End Sub 
'3. Change cell styles to default when selection is being changed like cell_click or cell_double click: 
Private Sub DGV_Root_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DGV_Root.CellMouseClick 
     DGV_Root.DefaultCellStyle.SelectionBackColor = df1 
     DGV_Root.DefaultCellStyle.SelectionForeColor = df3 
... 
End Sub 
'4. restore all to default when u want to close form: 
Private Sub PbClose_Click(sender As Object, e As EventArgs) Handles PbClose.Click 
     BtnCancel.PerformClick() 
     DGV_Root.DefaultCellStyle.SelectionBackColor = df1 
     DGV_Root.DefaultCellStyle.BackColor = df2 
     DGV_Root.DefaultCellStyle.SelectionForeColor = df3 
     DGV_Root.DefaultCellStyle.ForeColor = df4 
     Me.Close() 
End Sub 

Spero che questo aiuto u guys.

0

Se questo è perché ha sollevato indesiderato evento GridView1_SelectionChanged il caricamento iniziale, è possibile utilizzare una bandiera per gestire questa

public partial class YourFormName 
{ 
    private bool IsReady= false; 

    private void YourFormName_Load(object sender, EventArgs e) 
    { 
      //Load your GridView1... 
      //Format your GridView1... 
      IsReady = true; 
    } 
    void GridView1_SelectionChanged(object sender, EventArgs e) 
    { 
     if (!IsReady) 
      return; 
     //do the rest of the stuffs 
    } 
} 
Problemi correlati