我正在创建一个列表视图,并且正在从数据库中提取项目和子项目。但是,当我运行我的解决方案时,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);
}
}
答案 0 :(得分:0)
您只看到ID的原因是您没有合适的列。
您可以在设计师或代码中添加它们
由于您需要动态添加&#34;动态&#34;,您需要添加尽可能多的列,例如ItemArray
中的值。
试试这段代码。它对我有用。
没有必要使用Text
属性。每个SubItem
代表一个单元格。
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);
}
}