【问题标题】:C# wpf listview add itemsC# wpf listview 添加项目
【发布时间】:2013-05-07 22:48:27
【问题描述】:

我在创建列表视图时遇到问题。我也是 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]});                 
        }                
    }

有人可以帮助我吗?谢谢

【问题讨论】:

    标签: c# wpf listview


    【解决方案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;
    

    然后只需将ListViewItemsSource 设置为您的结果对象,如下所示:

    lbVysledky.ItemsSource = results;
    

    另外,附带说明一下,您似乎没有正确使用foreach 构造。您正在枚举每一列,但您保留自己的计数器并像这样访问该列:

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

    foreach 循环中,您已经使用 dc 变量枚举列,因此您可以像这样访问该列:

    gvCol.Header = dc.ColumnName;
    

    并且您不需要手动计算列数(使用 j)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多