• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# WPF nie wyświetlają się elementy w DataGrid

Object Storage Arubacloud
0 głosów
715 wizyt
pytanie zadane 1 września 2016 w C# przez niezalogowany

Witam, nic mi się nie wyświetla w DataGrid oprócz kolumny i jednego pustego wiersza.

 private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            komponenty.SelectedIndex = -1;
            tabela.Items.Clear();

            List<string> nazwyPlikow = new List<string>();
            foreach (var sciezka in Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Magazyn PRO/Bazy").Select(path => Path.GetFileName(path)))
                nazwyPlikow.Add(sciezka.Remove(sciezka.Length - 4));

            DataGridTextColumn kolumna = new DataGridTextColumn();
            kolumna.Header = "Nazwa bazy";
            kolumna.Binding = new Binding("Nazwa Bazy");
            tabela.Columns.Add(kolumna);

            for (int i=0; i<nazwyPlikow.Count; i++)
            {
                tabela.Items.Add(nazwyPlikow[i]);
            }
        }

 

1 odpowiedź

0 głosów
odpowiedź 2 września 2016 przez achilles147 Dyskutant (9,580 p.)

Nie wiem jakiego typu jest tabela ale spróbowałbym w taki sposób :

 

tabela.ItemsSource= NazwyPlikow;

 

Później jeszcze trzeba ustawić co chcesz wyświetlać i w jakich kolumnach. Btw nie wiem czemu nie robisz tego po stronie xaml a po stronie kodu c#. Jeżeli chcesz to robić po stonie c# to dalej pewnie musisz dodać poprostu kolumnę tak jak to robiłeś wcześniej.

Tu masz alternatywny przykład grida po stronie xaml:

 <Grid >
            <ListView
                    Name="ZipCodeListView"
                    ItemsSource="{Binding Path=tabela}"
                    IsSynchronizedWithCurrentItem="True" 
                    <ListView.View>
                        <GridView>
                            <GridViewColumn DisplayMemberBinding="{Binding Path= NazwaBazy}" Header="Nazwa bazy" Width="200" />
                        </GridView>
                    </ListView.View>
              </ListView>
</Grid>

 

komentarz 2 września 2016 przez niezalogowany
ta tabela ma wyglądać inaczej w zależności od akcji
komentarz 2 września 2016 przez niezalogowany
Twój sposób nie działa na kod w C#
komentarz 5 września 2016 przez achilles147 Dyskutant (9,580 p.)
nie działa to znaczy nie kompiluje się ? czy poprostu nie pokazuje Ci elementów żadnych na gridzie?. Jeżeli nie pokazuje elementów na gridzie wstaw kod jaki napisałeś, bo ciężko mi strzelać dlaczego :)
komentarz 6 września 2016 przez niezalogowany
private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            //sprawdzenie czy tabela jest w pozycji otwórz
            if (stanTabeli == Stan.bazy)
                return;

            //ustawienia początkowe
            komponenty.SelectedIndex = -1;
            tabela.Items.Clear();
            tabela.Columns.Clear();
            stanTabeli = Stan.bazy;

            //odczyt z pliku
            List<string> nazwyPlikow = new List<string>();
            foreach (var sciezka in Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Magazyn PRO/Bazy").Select(path => Path.GetFileName(path)))
                nazwyPlikow.Add(sciezka.Remove(sciezka.Length - 4));

            //stworzenie kolumny
            DataGridTextColumn kolumna = new DataGridTextColumn();
            kolumna.Header = "Nazwa bazy";
            kolumna.Binding = new Binding("Nazwa bazy");
            tabela.Columns.Add(kolumna);

            //dodanie nazwy plików 
            tabela.ItemsSource= nazwyPlikow;
        }

Dodaje mi kilka rzędów ale pustych

komentarz 7 września 2016 przez achilles147 Dyskutant (9,580 p.)

Później jeszcze trzeba ustawić co chcesz wyświetlać i w jakich kolumnach.

Ustawiłeś źródło danych a teraz trzeba ustawić to co chcesz wyświetlać. Jako, że masz listę stringów to będzie to troszeczkę bardziej skomplikowane. Ogólnie rzecz biorąc na twoim gridzie (tabela) jest właściwość DisplayMemberPath. Ona przyjmuje nazwę właściwości, którą ma wyświetlić. Jeżeli np miałbyś listę obiektów klasy A (gdzie klasa A ma tylko jedną właściwość string name) to żeby wyświetlić ją na gridzie wystarczyło by napisać poniższą linijkę na końcu twojego kodu :

tabela.DisplayMemberPath = "name";

Ty natomiast operujesz na typie string, który nie ma żadnej właściwości, która zwróciła by Ci twoją oczekiwaną wartość ( wartość samego stringa). Dlatego też możesz zrobić coś takiego:

1. Napisać klasę która będzie zawierać w sobie jedną właściwość typu string :

public class StringWrapper
{
public string Value {get;set;}
}

i teraz wystarczy, że zamiast listy stringów, stworzysz listę 

List<StringWrapper> nazwyPlikow = new List<StringWrapper>();

Zainicjalizuj ją tymi samymi wartościami a następnie na końcu twojego kodu dodaj coś takiego : 

....
....            
tabela.ItemsSource = nazwyPlikow;
tabela.DisplayMemberPath = "Value";

Teraz powinno wyświetlać twoje wartości.

Podobne pytania

0 głosów
0 odpowiedzi 395 wizyt
pytanie zadane 29 sierpnia 2016 w C# przez niezalogowany
0 głosów
1 odpowiedź 1,550 wizyt
pytanie zadane 8 lipca 2016 w C# przez pablocity Początkujący (330 p.)
0 głosów
1 odpowiedź 598 wizyt
pytanie zadane 4 czerwca 2016 w C# przez winiardesign Gaduła (3,930 p.)

92,565 zapytań

141,417 odpowiedzi

319,602 komentarzy

61,950 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...