在c#运行时填充列表视图

本文关键字:列表 视图 填充 运行时 | 更新日期: 2023-09-27 17:52:43

我正在创建一个列表视图和项目和子项正在从数据库中获取。但是,当我运行我的解决方案时,listview只显示id。我想动态地添加列和行,使其像一个数据网格。这是我的代码。

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

在c#运行时填充列表视图

您只看到一个ID的原因是您没有合适的列。您可以在设计器或代码中添加它们。
当你需要"动态"添加时,你需要添加尽可能多的列,就像你在ItemArray中的值一样。

试试这段代码。这对我来说很有效。
不需要使用Text性质。每个SubItem代表一个cell。

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