Строки DataTables кажутся пустым списком C # WPF - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь заполнить ListView с помощью пользовательских DataTable. Я хочу создавать столбцы и строки динамически, из строк (toParse содержит строки, toParse2 содержит имена столбцов). Это не похоже на работу. Когда я запускаю программу, я вижу что-то вроде этого (System.Data.DataRowView): РЕЗУЛЬТАТ

public partial class MainWindow : Window
    {
        ListView items;
        string toParse = "1 12 13\n2 15 16\n3 9 14\n20 123 541235\n4 1234 567";
        string toParse2 = "id value1 value2";
        public MainWindow()
        {
            InitializeComponent();
            items = GenerateListView(10,10);
        }
        public ListView GenerateListView(int posx, int posy)
        {
            ListView listview = new ListView();
            DataTable table = new DataTable();

            string[] columnNames = toParse2.Split(' ');
            foreach (string name in columnNames) table.Columns.Add(name);

            string[] lines = toParse.Split('\n');
            foreach(string line in lines) {
                string[] values = line.Split(' ');

                if (values.Length==columnNames.Length)
                {
                    DataRow row = table.NewRow();
                    table.Rows.Add(row);

                    for (int i=0; i<values.Length; i++)
                    {
                        row[i] = values[i];
                    }
                }
            }
            listview.ItemsSource = table.DefaultView;

            this.grid1.Children.Add(listview);
            return listview;
        }
    } 

Кроме того, когда я отлаживаю таблицу, кажется, что Count of Rows действительно работает, но список пуст (?).

1 Ответ

0 голосов
/ 01 мая 2018

Вам необходимо определить столбцы списка. Вы можете использовать GridView для определения ваших столбцов ListView.

Я добавил GridView myGridView = new GridView(); и определил его столбцы, используя привязку данных.

public partial class MainWindow : Window
    {
        private ListView items;
        private string toParse = "1 12 13\n2 15 16\n3 9 14\n20 123 541235\n4 1234 567";
        private string toParse2 = "id value1 value2";

        public MainWindow()
        {
            InitializeComponent();
            items = GenerateListView(10, 10);
        }

        public ListView GenerateListView(int posx, int posy)
        {
            ListView listview = new ListView();
            DataTable table = new DataTable();
            GridView myGridView = new GridView();

            string[] columnNames = toParse2.Split(' ');
            foreach (string name in columnNames)
            {
                table.Columns.Add(name);

                GridViewColumn gvc = new GridViewColumn();
                gvc.DisplayMemberBinding = new Binding(name);
                gvc.Header = name;
                gvc.Width = 100;

                myGridView.Columns.Add(gvc);
            }
            string[] lines = toParse.Split('\n');
            foreach (string line in lines)
            {
                string[] values = line.Split(' ');

                if (values.Length == columnNames.Length)
                {
                    DataRow row = table.NewRow();
                    table.Rows.Add(row);

                    for (int i = 0; i < values.Length; i++)
                    {
                        row[i] = values[i];
                    }
                }
            }

            listview.View = myGridView;
            listview.ItemsSource = table.DefaultView;

            this.grid1.Children.Add(listview);
            return listview;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...