• 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

VPS Starter Arubacloud
0 głosów
711 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 394 wizyt
pytanie zadane 29 sierpnia 2016 w C# przez niezalogowany
0 głosów
1 odpowiedź 1,526 wizyt
pytanie zadane 8 lipca 2016 w C# przez pablocity Początkujący (330 p.)
0 głosów
1 odpowiedź 576 wizyt
pytanie zadane 4 czerwca 2016 w C# przez winiardesign Gaduła (3,930 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...