2010-01-16 12 views
8

CanUserAddRows="True" solo 'funziona' quando sono già presenti dati nello ItemsSource dello DataGrid. Se accade che non ci siano righe nell'elenco originale degli articoli, quindi lo DataGrid non visualizza una riga placeholder per l'inserimento di nuovi elementi, anche se ho impostato CanUserAddRows="True". Perché?!WPF DataGrid non può aggiungere una riga quando l'origine dati è vuota

Grazie in anticipo, Trindaz

+0

inoltre, ciò che accade è che non puoi scorrere verso destra per vedere le colonne fuori dallo schermo, perché non hai barre di scorrimento orizzontali senza elementi. –

risposta

2

Questo sembra essere un problema noto con WPF DataGrid. Vedere la discussione here (a partire dal 4 ° commento) Inoltre sembra essere stato risolto in .net 4. Ho effettuato alcuni test per questo problema sui framework 3.5 e 4 (beta2). Pls, vedere i risultati di seguito:

Prima ho definito 3 tipi di collezioni di articoli:

public class TestGridItems0 : ArrayList 
{ 
} 

public class TestGridItems1 : List<TestGridItem> 
{ 
} 

public class TestGridItems2<T> : List<TestGridItem> 
{ 
} 

dove TestGridItem è qui sotto:

public class TestGridItem 
{ 
    public string One { get; set; } 
    public string Two { get; set; } 
    public string Three { get; set; } 
} 

.net 3,5

TestGridItems0 e TestGridItems1 non ha mostrato una riga vuota per una collezione vuota; dove come TestGridItems2 ha funzionato bene.

NET 4

solo TestGridItems0 non ha mostrato la linea per la raccolta vuoto; gli altri 2 hanno funzionato bene.

XAML per la griglia:

<my:DataGrid Name="dataGrid" AutoGenerateColumns="False" CanUserAddRows="True"> 
    <my:DataGrid.Columns> 
     <my:DataGridTextColumn Binding="{Binding One}" Header="One" /> 
     <my:DataGridTextColumn Binding="{Binding Two}" Header="Two" /> 
     <my:DataGridTextColumn Binding="{Binding Three}" Header="Three" /> 
    </my:DataGrid.Columns> 
</my:DataGrid> 

sotto è come è stato assegnato elementi fonte:

dataGrid.ItemsSource = new TestGridItems0(); 
dataGrid.ItemsSource = new TestGridItems1(); 
dataGrid.ItemsSource = new TestGridItems2<TestGridItem>(); 

speranza che questo aiuti, riguarda

+0

Una semplice conversione di '.ToList()' ha risolto il problema. Grazie per il suggerimento. –

1

aggiungere un elemento vuoto al vostro ItemsSource e rimuovere esso. Potrebbe essere necessario impostare CanUserAddRows su true dopo averlo fatto. Ho letto questa soluzione here: (Messaggi di Jarrey e Rick Roen)

Ho avuto questo problema quando ho impostato ItemsSource su DefaultView di DataTable e la vista era vuota. Le colonne sono state definite anche se quindi avrebbe dovuto essere in grado di ottenerle. Eh.

Problemi correlati