尝试在列表视图中显示项目

时间:2015-03-23 13:28:51

标签: c# sql winforms listview

我正在尝试将从搜索中获得的结果添加到列表视图中,但是当显示值时,它不会按预期显示。我希望它有适当的标题以及标题下列出的适当结果,我们将非常感谢任何建议或帮助。

using (SqlConnection cn = new SqlConnection(@"Data Source=*****;Initial Catalog=Database name;Integrated Security=True"))
{
    using (SqlDataAdapter sdagetAssetSearch = new SqlDataAdapter("Select * From Asset WHERE (AssetName LIKE '%" + txtSimpleSearch.Text + "%') OR (ModelNumber LIKE '%" + txtSimpleSearch.Text + "%')", cn))
    {
        DataTable getAssetSearchDt = new DataTable();
        sdagetAssetSearch.Fill(getAssetSearchDt);

        for (int p = 0; p < getAssetSearchDt.Rows.Count; p++)
        {
            ListViewItem listitem = new ListViewItem(getAssetSearchDt.Rows[p]["AssetName"].ToString());

            lstDisplayAssetSearchDetails.Items.Add(getAssetSearchDt.Rows[p]["AssetName"].ToString());
            lstDisplayAssetSearchDetails.Items.Add(getAssetSearchDt.Rows[p]["Category"].ToString());
            lstDisplayAssetSearchDetails.Items.Add(getAssetSearchDt.Rows[p]["ModelNumber"].ToString());
            lstDisplayAssetSearchDetails.Items.Add(listitem);                        
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我不知道您是否创建了专栏。但是如果要在ListView中显示列,则必须添加这样的列。

lstDisplayAssetSearchDetails.Columns.Add("Assets Name");
lstDisplayAssetSearchDetails.Columns.Add("Category");
lstDisplayAssetSearchDetails.Columns.Add("Model Number");

您可以在InitializeComponent方法调用之后在Form_Load或Constructor中添加此代码。

还有一件事是你需要设置ViewType。它应该是DetailView

您可以在添加列之前或在设计时直接从属性窗口设置此属性。

lstDisplayAssetSearchDetails.View = View.Details;

然后现在您的ListView已准备好将数据填充到其中。但是,请确保每次填写数据时都应清除以前的项目。在您的代码中,您在填写ListView之前没有清除项目。

lstDisplayAssetSearchDetails.Items.Clear();

for (int p = 0; p < getAssetSearchDt.Rows.Count; p++)
{
    .....

此行应在开始循环之前添加。因此,在填充新内容之前,这将清除项目。

您可以看到我们上面添加了4列。如果我想将数据填充到每个项目的所有列中。然后每个项目应该添加至少2个子项目。

ListViewItem listitem = new ListViewItem(getAssetSearchDt.Rows[p]["AssetName"].ToString());
listitem.SubItems.Add(getAssetSearchDt.Rows[p]["Category"].ToString());
listitem.SubItems.Add(getAssetSearchDt.Rows[p]["ModelNumber"].ToString());
lstDisplayAssetSearchDetails.Items.Add(listitem);

我们不会在Subitem列表中添加AssetName。因为第一列是主ListItem,而另一列是SubItems