У меня проблема с созданием списка. Я тоже новичок в C # и wpf. Я пробовал разные методы заполнения элементов ListView и не могу решить эту проблему, потому что входной массив имеет размеры NxN. Я нашел инструкции на Bindig, но я не могу их применить, потому что я не могу создать объект этого типа, потому что входной массив является динамическим. Я могу заполнять столбцы заголовков, но не строки и столбцы значениями. Этот код работает, но все значения вместе в одном столбце.

public void PrintListView(ResultsTable results)
    {
        System.Windows.Controls.GridView gv = new System.Windows.Controls.GridView();
        gv.AllowsColumnReorder = true;

        int j=0;
        foreach (DataColumn dc in results.Columns)
        {
            GridViewColumn gvCol = new GridViewColumn(); 
            gvCol.Header = results.Columns[j].ColumnName;
            gvCol.Width = 200;             
            gv.Columns.Add(gvCol); 
            j++;           
        }
        lbVysledky.View = gv;

        foreach (DataRow dr in results.Rows)
        {
            string[] array1 = new string[1000];
           // List<string> zoznam = new List<string>();
         //   ObservableCollection<string> kolekcia = new ObservableCollection<string>();
            int i = 0;
            foreach (DataColumn dc in results.Columns)
            {         
                array1[i] = dr[dc].ToString();
           //     zoznam.Add (dr[dc].ToString());
           //     kolekcia.Add(dr[dc].ToString());                 
                i++;
            }
           this.lbVysledky.Items.Add(new ListViewItem { Content = pole[0] + pole[1]});                 
        }                
    }

Кто-нибудь может мне помочь? Благодарность

0
user2358681 7 Май 2013 в 18:33

1 ответ

Лучший ответ

Похоже, вы пытаетесь заполнить ListView, добавляя по одной строки и столбцы. Это не тот подход, который следует использовать при заполнении ListView. Вместо этого вы добавляете ItemsSource (в данном случае ваш объект результатов) и сообщаете ListView, что означает DisplayMemberBinding для каждого столбца, и он будет отображать правильные значения в каждом столбце для каждый ряд.

Вероятно, это просто означает изменение вашего цикла, в котором вы добавляете столбцы в ListView примерно так:

foreach (DataColumn dc in results.Columns)
{
    GridViewColumn gvCol = new GridViewColumn(); 
    gvCol.DisplayMemberBinding = new Binding(dc.ColumnName);        
    gvCol.Header = results.Columns[j].ColumnName;
    gvCol.Width = 200;     
    gv.Columns.Add(gvCol); 
    j++;           
}
lbVysledky.View = gv;

Затем просто установите ItemsSource из ListView для вашего объекта результатов следующим образом:

lbVysledky.ItemsSource = results;

Кроме того, в качестве примечания, вы, похоже, не правильно используете конструкцию foreach. вы перечисляете по каждому столбцу, но сохраняете свой собственный счетчик и получаете доступ к столбцу следующим образом:

gvCol.Header = results.Columns[j].ColumnName;

В цикле foreach вы уже перечисляете столбцы с помощью переменной dc, поэтому вы можете получить доступ к столбцу следующим образом:

gvCol.Header = dc.ColumnName;

И вам не нужно вручную подсчитывать столбцы (с j).

0
Brian S 7 Май 2013 в 18:48