0

リストビューの作成に問題があります。私はC#とwpfも初めてです。入力配列がNxN次元であるため、ListViewアイテムを埋めるさまざまな方法を試しましたが、解決できません。Bindig に関する説明を見つけましたが、入力配列が動的であるため、その型のオブジェクトを作成できないため、それらを適用できません。ヘッダー列を埋めることはできますが、行と列に値を入れることはできません。このコードは機能しますが、すべての値が 1 つの列にまとめられています。

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]});                 
        }                
    }

誰かが私を助けることができますか?ありがとう

4

1 に答える 1

0

ListView行と列を 1 つずつ追加して、データを入力しようとしているようです。これは、 を作成するときに使用するアプローチではありません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;

次に、次のように を結果オブジェクトに設定ItemsSourceListViewます。

lbVysledky.ItemsSource = results;

また、補足として、foreach構造を正しく使用していないようです。各列を列挙していますが、独自のカウンターを保持しており、次のように列にアクセスしています。

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

ループでは、foreach既に dc 変数を使用して列を列挙しているため、次のように列にアクセスできます。

gvCol.Header = dc.ColumnName;

列を手動でカウントする必要はありません (j を使用)。

于 2013-05-07T14:48:27.480 に答える