Dynamiczna tabelka c#

0

Witam, potrzebuję rad i wskazówek dotyczących zrobienia tabelki w c#, otóż jako projekt grupowy na studiach piszemy drzewo decyzyjne i jako obecne zadanie mam zaprezentować dane(listę atrybutów i ich wartości w tabeli), oprócz tego muszę mieć opcje dodania/usunięcia/edycji atrybutu lub jego wartości które nie tylko doda lub zmieni je w tabeli a także w kolekcji w pamięci, jest to mój pierwszy kontakt z c# oraz jako takim front endem. Czy takie coś jest w miarę łatwe do napisania? Będę wdzięczny za wszelkie odpowiedzi.

A właśnie nie wiem czy to istotne ale graficznie używamy wpf.

1

Myślę że wystarczy do tego zwykła lista z obiektami zawierającymi potrzebne informacje.
Co do WPF to użyłbym chyba DataGrida:
https://www.wpftutorial.net/datagrid.html

Ogólnie jest to dość proste, jednak na początku XAML może sprawić nieco trudności

0

Tak, informacje ma pobierać z listy atrybutów, gorzej z napisaniem kodu odpowiedzialnego za tworzenie tej tabeli.

1

@Dicanio: kiedyś popełniłem aplikacje do tworzenia grafów posiadającą dynamiczną tabelkę na polach tekstowych.
Widok:
https://github.com/OrchowskiaStudy/Graphs/blob/master/Graphs/Views/Controls/AdjacencyListInput.xaml

ViewModel:
https://github.com/OrchowskiaStudy/Graphs/blob/master/Graphs/ViewModels/AdiacencyListInputViewModel.cs

Na podstawie ilości wierzchołków tabelka odpowiednio się powiększa i zmniejsza. W zasadzie z tego co napisałeś ciężko jest wywnioskować czego dokładnie potrzebujesz
Może się przyda ;)

0

Za pisanie tego będę zabierał się w weekend, dzięki za linki, przejrzałem je, ale ze względu że nie miałem z tym żadnej styczności ciężko coś z tego zrozumieć. Bardziej rozwijając temat w projekcie są 3 zakładki, drzewo, dane i atrybuty. W zakładce drzewo jest na razie rysowanie na sztywno drzewa z jego atrybutami w wezlach i wartościami na ramionach, dane są aktualnie puste, a moja rola czyli zakładka atrybuty ma rysować tabele gdzie 1 kolumna to po prostu licznik, 2 to nazwa atrybutu a 3 i kolejne to jego wartości. Przykladowo:

  1. | Temperatura | <0 | 0-10 | 10-20 | >20
    Musze tez mieć opcje dodawania atrybutów wraz z wartościami oraz dodawanie/usuwanie wartości do istniejących atrybutów. Mam nadzieję że teraz dokładnie opisałem :P
0

Niestety nie za bardzo rozumiem jak mam podpiąć obiekt danej klasy jako źródło danych w tabelce. W Przykladzie jest linijka

<DataGrid ItemsSource="{Binding Customers}" />

Ja jako źródło chciałbym podpiąć klasę z projektu o nazwie DataAttributeCollection która dziedziczy po liście a jej elementami są obiekty klasy DataAttribute który zawiera nazwę jako string i listę swoich wartości jako stringi. Chciałbym, aby w pierwszej kolumnie wyświetlała się nazwa atrybutu a w pozostałych x kolumnach jej wartości.

//edit
Napisałem takie coś

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Decision_tree.DataObjects.DataAttributes;

namespace Decision_tree.Views.Pages
{
    /// <summary>
    /// </summary>
    public partial class PageAttributeData : Window
    {
        public PageAttributeData()
        {

                DataAttributeCollection dac = new DataAttributeCollection();
                DataAttribute da = new DataAttribute("Wind");
                da.AddValue("Weak");
                da.AddValue("Strong");
                da.AddValue("Medium");
                dac.Add(da);
                da = new DataAttribute("Temperature");
                da.AddValue("Low");
                da.AddValue("Medium");
                da.AddValue("High");
                dac.Add(da);
            AttributeDataGrid.ItemsSource = dac;
            
            InitializeComponent();

        }
    }
}

Poprawnie to napisałem? Jeśli tak to jak teraz te wszystkie dane i zaprezentować je w tabeli?

//edit2
No jednak się przekonałem, że źle napisałem.
System.NullReferenceException: „Object reference not set to an instance of an object.”

0

Doszedłem do momentu gdzie jestem w stanie wybrać ile chcę kolumn i wierszy, wiem jak wpisać tekst w pierwsze kolumny ale nie mam pojęcia jak wpisać cokolwiek w pola values
http://prntscr.com/n8358t

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Decision_tree.DataObjects.DataAttributes;
namespace Decision_tree.Views.Pages
{
    /// <summary>
    /// Logika interakcji dla klasy PageMainAttribute.xaml
    /// </summary>
    public partial class PageMainAttribute : Page
    {
        public PageMainAttribute()
        {
            InitializeComponent();
            DataAttribute da1 = new DataAttribute("Wind");
            DataAttribute da2 = new DataAttribute("Temperature");
            DataAttribute da3 = new DataAttribute("Rain");
            da1.AddValue("Strong");
            da1.AddValue("Storm");
            da1.AddValue("None");
            da2.AddValue("Hot");
            da2.AddValue("Cold");
            da3.AddValue("Yes");
            da3.AddValue("No");
            DataAttributeCollection dac = new DataAttributeCollection();
            dac.Add(da1);
            dac.Add(da2);
            dac.Add(da3);
            //AttributeGrid.ItemsSource = null;
            //AttributeGrid.ItemsSource = dac;

            DataGridTextColumn textColumn = new DataGridTextColumn();
            textColumn.Header = "Attribute name";
            textColumn.Binding = new Binding();
            AttributeGrid.Columns.Add(textColumn);

            for (int k=0;k<dac.MaxLength;k++)
            {
                textColumn = new DataGridTextColumn();
                textColumn.Header = "Value #"+(k+1);
                textColumn.Binding = new Binding("I dont know what to type here");
                AttributeGrid.Columns.Add(textColumn);
            }
            for(int i=0;i<dac.Size;i++)
            {
                    AttributeGrid.Items.Add(dac.ElementAt(i).AttributeName);
            }


        }
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1