Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 在C中通过运行时填充listview#_C#_.net_Listview - Fatal编程技术网

C# 在C中通过运行时填充listview#

C# 在C中通过运行时填充listview#,c#,.net,listview,C#,.net,Listview,我正在创建一个listview,并且正在从数据库中获取项和子项。但是,当我运行我的解决方案时,listview只显示id。我想动态添加列和行,使其像datagrid一样。这是我的密码 private void frmMain_Load(object sender, EventArgs e) { DataTable table = new DataTable(); table = logic.ViewInfo(); listView1.Vie

我正在创建一个listview,并且正在从数据库中获取项和子项。但是,当我运行我的解决方案时,listview只显示id。我想动态添加列和行,使其像datagrid一样。这是我的密码

private void frmMain_Load(object sender, EventArgs e)
    {
        DataTable table = new DataTable();
        table = logic.ViewInfo();
        listView1.View = View.Details;
        ListViewItem myList;
        foreach (DataRow row in table.Rows)
        {
            myList = new ListViewItem();
            for (int i = 0; i < row.ItemArray.Length; i++)
            {
                if (i == 0)
                    myList.Text = row.ItemArray[i].ToString();
                else
                    myList.SubItems.Add(row.ItemArray[i].ToString());
            }
            listView1.Items.Add(myList);
        }
    }
private void frmMain\u加载(对象发送方,事件参数e)
{
DataTable=新的DataTable();
table=logic.ViewInfo();
listView1.View=View.Details;
ListViewItemMyList;
foreach(table.Rows中的DataRow行)
{
myList=新建ListViewItem();
for(int i=0;i
您只看到ID的原因是您没有正确的列。 您可以在设计器或代码中添加它们。
由于需要“动态”添加,因此需要添加与
ItemArray
中的值一样多的列

试试这个代码。它对我有用。
不需要使用
文本
属性。每个
子项
代表一个单元格

private void frmMain_Load(object sender, EventArgs e)
{
    DataTable table = logic.ViewInfo(); // Combine declaration and assignment
    listView1.View = View.Details; // Better place it in designer 

    listView1.Columns.Clear();
    foreach (var column in dataTable.Columns)
    {
         listView1.Columns.Add(column.ColumnName); // or Caption, or anything else
    } 

    foreach (DataRow row in table.Rows)
    {
        ListViewItem myList = new ListViewItem(); // Move declaration into inner scope. You are reinitializing reference type variable each type. In my opinion, it is not good.
        for (int i = 0; i < row.ItemArray.Length; i++)
        {
            // You don't need Text property
            myList.SubItems.Add(row.ItemArray[i].ToString());
        }
        listView1.Items.Add(myList);
    }
}
private void frmMain\u加载(对象发送方,事件参数e)
{
DataTable table=logic.ViewInfo();//组合声明和赋值
listView1.View=View.Details;//最好将其放在designer中
listView1.Columns.Clear();
foreach(dataTable.Columns中的var列)
{
listView1.Columns.Add(column.ColumnName);//或标题,或其他任何内容
} 
foreach(table.Rows中的DataRow行)
{
ListViewItem myList=new ListViewItem();//将声明移动到内部作用域中。您正在重新初始化每种类型的引用类型变量。在我看来,这并不好。
for(int i=0;i
这是我工作中的要求。使用listview获得更直观的UI。对于第一行,检查列数,并为每列向列表视图添加列。