当Virtualmode设置为true时,列表视图中不显示子项

问题描述 投票:0回答:1

当虚拟模式为true时,我想从数据库填充列表视图。它是一个有2个coulmns的ListView。可以,但是当有子项目时,没有子项目显示:

这是我的代码:

private ListViewItem[] myCache; //array to cache items for the virtual list
private int firstItem; //stores the index of the first item in the cache

DataSet ds;
SqlDataAdapter dba;
public LVCacheTest()
{
    InitializeComponent();
    LoadDataFromDataBase();
    ListView listView1 = new ListView();
    listView1.Dock = DockStyle.Fill;
    listView1.View = View.SmallIcon;
    listView1.GridLines = true;
    listView1.VirtualMode = true;
    listView1.VirtualListSize = ds.Tables[0].Rows.Count;
    listView1.Columns.Add("ID", 70, HorizontalAlignment.Center);
    listView1.Columns.Add("Code", 70, HorizontalAlignment.Center);
    listView1.RetrieveVirtualItem += new RetrieveVirtualItemEventHandler(listView1_RetrieveVirtualItem);            
    this.Controls.Add(listView1);

    //Search for a particular virtual item.
    //Notice that we never manually populate the collection!
    //If you leave out the SearchForVirtualItem handler, this will return null.
    ListViewItem lvi = listView1.FindItemWithText("");

    //Select the item found and scroll it into view.
    if (lvi != null)
    {
        listView1.SelectedIndices.Add(lvi.Index);
        listView1.EnsureVisible(lvi.Index);
    }
}


private void LoadDataFromDataBase()
    {
        string cn="Initial Catalog=ECart;Data Source=sql2012;Integrated Security=SSPI;Persist Security Info=False";
        SqlConnection SqlConnection = new SqlConnection(connectionString);
        dba = new SqlDataAdapter("SELECT ID,ProjectCode FROM vwRef ", cn);

        ds = new DataSet();

        dba.Fill(ds, "vwRef");            
    } 


void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
    {          
        int x = 0;
        ListViewItem lvi = new ListViewItem(x.ToString());
        if (ds != null)
        {
            x = int.Parse(ds.Tables[0].Rows[e.ItemIndex].ItemArray[0].ToString());
            lvi.Text = x.ToString();
            ListViewItem.ListViewSubItem lvsi = new ListViewItem.ListViewSubItem();
            lvsi.Text = ds.Tables[0].Rows[e.ItemIndex].ItemArray[1].ToString();
            lvi.SubItems.Add(lvsi);
        }
        e.Item = lvi; 
    }
c# visual-studio android-listview
1个回答
0
投票

一个非常愚蠢的错误。我改变了

 listView1.View = View.SmallIcon;

 listView1.View = View.Details;

现在显示SUbitem。

© www.soinside.com 2019 - 2024. All rights reserved.