Siatka danych WPF pusty wiersz na dole

201

Wiążę mój datagrid za pomocą

//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];
     }
 }

Z jakiegoś powodu dostaję pusty wiersz na dole. A czasami po kliknięciu niektórych przycisków i pól wyboru w siatce dodaje się więcej pustych wierszy.

Dlaczego to? I jak to zablokować?

WtFudgE
źródło

Odpowiedzi:

447

Wygląda na to, że prawdopodobnie CanUserAddRowsustawiłeś wartość true dla DataGrid. Poprostu dodaj

CanUserAddRows="false"

do XAML.

Tomi Junnila
źródło
13
pamiętaj, że nawet jeśli pole wyboru we właściwościach siatki nie jest zaznaczone, musisz jawnie dodać ten wiersz kodu, aby ukryć dodatkowy wiersz (lub zaznaczyć i odznaczyć pole wyboru)
Tobias Valinski
6
Jeśli nie chcesz kodu z tyłu, dodaj atrybut CanUserAddRows = „False”. Wygląda na błąd w WPF, który musisz jawnie ustawić na false.
ZZZ
Raczej mam odwrotny problem. Nie tworzy pustego wiersza, podczas gdy wolałbym tego.
Shimmy Weitzhandler
21

Działa również z atrybutem:

IsReadOnly="true"
Arti
źródło
Działa to lepiej niż CanUserAddRows i CanUserDeleteRows
RDV
13

Jeśli twoja kolekcja kopii zapasowych, która implementuje, IEditableCollectionViewzwraca true ze swojej CanAddNewmetody, DataGrid przyjmie, że właśnie to chcesz zrobić.

Tutaj jest dobry przegląd: Przegląd funkcji edycji w WPF DataGrid

Paszcza Alastair
źródło
3

Jeśli tworzysz DataGrid w locie za pomocą kodu źródłowego ...

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
Web Developer
źródło
0

Chociaż OP pytał, jak USUNĄĆ pusty wiersz, tytuł nie jest konkretny, a ten artykuł pojawił się w moich poszukiwaniach, próbując dowiedzieć się, jak DODAĆ pusty wiersz. Odkryłem, że aby pojawił się pusty wiersz, musi on nie tylko mieć, CanUserAddRows="True"ale ItemsSourcemusi mieć domyślnego konstruktora public MyClass () { }.

Żelazny pręt
źródło