繁体   English   中英

C#WPF ListView添加项目

[英]C# wpf listview add items

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

有人能帮我吗? 谢谢

看起来您正在尝试通过一次添加一行和一列来填充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)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM