Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#wpf列表视图添加项目_C#_Wpf_Listview - Fatal编程技术网

C#wpf列表视图添加项目

C#wpf列表视图添加项目,c#,wpf,listview,C#,Wpf,Listview,我在创建listview时遇到问题。我也是C#和wpf的新手。 我尝试过填充ListView项的不同方法,但我无法解决它,因为输入数组是NxN维。我在Bindig上找到了说明,但我无法应用它们,因为我无法创建该类型的对象,因为输入数组是动态的。 我可以填充标题列,但不能用值填充行和列。此代码有效,但所有值都集中在一列中 public void PrintListView(ResultsTable results) { System.Windows.Controls.Gri

我在创建listview时遇到问题。我也是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]});                 
        }                
    }
public void打印列表视图(结果表结果)
{
System.Windows.Controls.GridView gv=新建System.Windows.Controls.GridView();
gv.AllowsColumnReorder=true;
int j=0;
foreach(results.Columns中的数据列dc)
{
GridViewColumn gvCol=新的GridViewColumn();
gvCol.Header=results.Columns[j].ColumnName;
gvCol.宽度=200;
gv.列。添加(gvCol);
j++;
}
lbVysledky.View=gv;
foreach(results.Rows中的数据行dr)
{
字符串[]数组1=新字符串[1000];
//List zoznam=新列表();
//ObservableCollection kolekcia=新的ObservableCollection();
int i=0;
foreach(results.Columns中的数据列dc)
{         
array1[i]=dr[dc].ToString();
//添加(dr[dc].ToString());
//Add(dr[dc].ToString());
i++;
}
this.lbVysledky.Items.Add(新的ListViewItem{Content=pole[0]+pole[1]});
}                
}

有人能帮我吗?谢谢

看起来您正试图通过一次添加一行和一列来填充
列表视图
。这不是填充
列表视图时使用的方法。相反,您可以添加
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;
lbVysledky.ItemsSource = results;
gvCol.Header = results.Columns[j].ColumnName;
gvCol.Header = dc.ColumnName;
然后只需将
列表视图的
项资源设置为您的结果对象,如下所示:

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;
lbVysledky.ItemsSource = results;
gvCol.Header = results.Columns[j].ColumnName;
gvCol.Header = dc.ColumnName;
另外,作为旁注,您似乎没有正确使用
foreach
构造。您对每一列进行枚举,但保留自己的计数器并按如下方式访问该列:

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;
lbVysledky.ItemsSource = results;
gvCol.Header = results.Columns[j].ColumnName;
gvCol.Header = dc.ColumnName;
foreach
循环中,您已经在使用dc变量枚举列,因此可以如下方式访问列:

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;
lbVysledky.ItemsSource = results;
gvCol.Header = results.Columns[j].ColumnName;
gvCol.Header = dc.ColumnName;
您不需要手动计算列数(使用j)