将数据库中的数据插入ListView控件WindowForms

本文关键字:ListView 控件 WindowForms 插入 数据 数据库 | 更新日期: 2023-09-27 17:53:20

我正试图从数据库中选择数据到列表视图,但它不起作用。没有任何错误或任何东西,但代码完全没有响应。。。。。

    private void Form1_Load(object sender, EventArgs e)
    {
        listView1.View = View.Details;
        listView1.GridLines = true;
        listView1.FullRowSelect = true;
        SqlConnection con = new SqlConnection();
        SqlCommand cmd = new SqlCommand();
        SqlDataAdapter da = new SqlDataAdapter();
        DataTable dt = new DataTable();
        con.ConnectionString = @"Data Source=.;Initial Catalog=ListView_Data;Integrated Security=True";
        cmd.CommandText = @"select ProductName,Price,Quantity from producttable";
        con.Open();
        cmd.Connection = con;
        da.SelectCommand = cmd;
        da.Fill(dt);
        //////////////////////////////////////////////////////////////////////
        string[]ar=new string[100];
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            ar[i] = dt.Rows[0][i].ToString();
        }
        ListViewItem itm = new ListViewItem(ar);
        listView1.Items.Add(itm);
    }

将数据库中的数据插入ListView控件WindowForms

您可以这样做。

string[]ar=new string[dt.Columns.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
    for (int c=0;c <dt.Columns.Count; c++)
        ar[c] = dt.Rows[i][c].ToString();
    listView1.Items.Add(new ListViewItem(ar));
}

但是,我想优先使用这个。

ListViewItem li = 0;
for (int i = 0; i < dt.Rows.Count; i++)
{
    li = listView1.Items.Add(dt.Rows[i][0].ToString());
    for (int c = 1; c < dt.Columns.Count; c++)
        li.SubItems.Add(dt.Rows[i][c].ToString());
}

您在所有行上循环,并创建一个唯一的数组,尝试将其用作单个ListViewItem的构造函数。

你可以用简化你的代码

foreach(DataRow d in dt.Rows)
    listView1.Items.Add(new ListViewItem(d.ItemArray.Select(x => x.ToString()).ToArray())); 

但这似乎是一个循环两次的经典情况。

  • 第一次,对DataAdapter.Fill的调用在您的结果上循环填写数据表
  • 第二次,在DataTable行上循环以填充ListView

对于小数据集,没有什么大问题,但如果您返回了大量数据,并且不需要将DataTable保留用于其他目的,那么我建议使用SqlDataReader并直接准备ListViewItem,而无需首先填充DataTable。