213 votes

Grille de données WPF : ligne vide en bas

Je lie ma grille de données en utilisant

//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, j'obtiens une ligne vide en bas. Et parfois, après avoir cliqué sur certains boutons et cases à cocher dans la grille, d'autres lignes vides sont ajoutées.

Pourquoi cela ? Et comment puis-je bloquer cela ?

481voto

Tomi Junnila Points 2599

On dirait que vous avez probablement CanUserAddRows défini à true pour le DataGrid. Il suffit d'ajouter

CanUserAddRows="false"

à la XAML.

13 votes

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

6 votes

Si vous ne voulez pas de code derrière, ajoutez l'attribut CanUserAddRows="False". Il semble que ce soit un bug de WPF que de devoir le définir à false explicitement.

0 votes

J'ai plutôt le problème inverse. Il ne crée pas de ligne vide, alors que c'est ce que je voudrais.

24voto

user1650891 Points 107

Il fonctionne également avec l'attribut :

IsReadOnly="true"

0 votes

Cela fonctionne mieux que CanUserAddRows et CanUserDeleteRows.

13voto

Alastair Maw Points 1549

Si votre collection de sauvegarde qui implémente IEditableCollectionView renvoie un message vrai à partir de son CanAddNew le DataGrid supposera que c'est ce que vous voulez faire.

Il y a un bon aperçu ici : Aperçu des fonctions d'édition dans la grille de données WPF

3voto

Francisco Campos Points 376

Si vous créez un DataGrid à la volée via 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

1voto

RodBarnes Points 54

Bien que l'OP demande comment SUPPRIMER la ligne vide, le titre n'est pas spécifique, et cet article est apparu dans ma recherche alors que j'essayais de trouver comment AJOUTER la ligne vide. J'ai découvert que, pour que la ligne vide apparaisse, elle doit non seulement avoir CanUserAddRows="True" mais le ItemsSource doit avoir un constructeur par défaut public MyClass () { } .

0 votes

Merci beaucoup !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X