2009-11-23 8 views
150

Je lie mon DataGrid à l'aideWPF DataGrid ligne vide au fond

//fill datagrid 
public DataTable GameData 
{ 
    get 
    { 
     DataSet ds = new DataSet(); 
     FileStream fs = new FileStream(IMDB.WebPage.Class.Config.XMLPath, 
     FileMode.Open, FileAccess.Read); 
     StreamReader reader = new StreamReader(fs, Encoding.Default); 
     ds.ReadXml(reader); 
     fs.Close(); 
     DataTable temp = ds.Tables[0]; 
     return ds.Tables[0]; 
    } 
} 

Pour une raison quelconque, je reçois une ligne vide au fond. Et parfois, après avoir cliqué sur certains boutons et cases à cocher dans la grille, davantage de lignes vides sont ajoutées.

Pourquoi est-ce? Et comment puis-je bloquer cela?

Répondre

340

Semble que vous avez probablement CanUserAddRows défini sur true pour le DataGrid. Il suffit d'ajouter

CanUserAddRows="false" 

au code XAML.

+9

super, ça a fait l'affaire! Bizarre pourquoi c'est par défaut .. – WtFudgE

+0

court et doux :) A travaillé comme un charme !! Merci @Tomi –

+8

Gardez à l'esprit que même si la case à cocher dans les propriétés de la grille est décochée vous devez ajouter explicitement cette ligne de code pour cacher la ligne supplémentaire (ou cocher et décocher la case) –

13

Si votre collection de sauvegarde qui implémente IEditableCollectionView renvoie la valeur true à partir de sa méthode CanAddNew, le DataGrid suppose que c'est ce que vous voulez faire.

Il y a un bon aperçu ici: Overview of the editing features in the WPF DataGrid

3

Si vous créez DataGrid à la volée par le code source ...

DataGrid grid = new DataGrid(); 

grid.CanUserAddRows = false; 

//... 
grid.AutoGenerateColumns = false; 
grid.Margin = new Thickness(10,20,10,10); 
grid.VerticalAlignment = VerticalAlignment.Top; 
grid.ItemsSource = //... and so on 
13

Il fonctionne également avec l'attribut:

IsReadOnly="true"