Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Listview虚拟模式访问数据库?_C# - Fatal编程技术网

C# 如何使用Listview虚拟模式访问数据库?

C# 如何使用Listview虚拟模式访问数据库?,c#,C#,我有一段从数据库检索数据的代码,但我的问题是它只显示ListViewItem上的最后一项。代码如下: private void patientLvw_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { cmd = new OleDbCommand("SELECT * FROM PATIENTS ORDER BY PATIENTS.PatientNo;", conn);

我有一段从数据库检索数据的代码,但我的问题是它只显示ListViewItem上的最后一项。代码如下:

    private void patientLvw_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
    {

        cmd = new OleDbCommand("SELECT * FROM PATIENTS ORDER BY PATIENTS.PatientNo;", conn);


        reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            String patientNo = ""; ;
            String lastName = "";
            String firstName = "";
            String middleInitial = "";
            String age = "";
            String address = "";
            String type = "";
            String status = "";
            if (!reader.IsDBNull(0))
            {
                patientNo = reader.GetInt32(0).ToString();
            }

            if (!reader.IsDBNull(1))
            {
                lastName = reader.GetString(1);
            }

            if (!reader.IsDBNull(2))
            {
                firstName = reader.GetString(2);
            }
            if (!reader.IsDBNull(3))
            {
                middleInitial = reader.GetString(3);
            }
            if (!reader.IsDBNull(4))
            {
                age = reader.GetInt32(4).ToString();
            }
            if (!reader.IsDBNull(5))
            {
                address = reader.GetString(5);
            }
            if (!reader.IsDBNull(6))
            {
                type = reader.GetString(6);
            }
            if (!reader.IsDBNull(7))
            {
                status = reader.GetBoolean(7).ToString();
            }

            ListViewItem lvi = new ListViewItem(patientNo);


            e.Item.SubItems.Add(lastName);

            e.Item.SubItems.Add(firstName);
            e.Item.SubItems.Add(middleInitial + ".");
            e.Item.SubItems.Add(age);
            e.Item.SubItems.Add(address + ".");
            e.Item.SubItems.Add(type);
            e.Item.SubItems.Add(status);

            e.Item = lvi;

        }
    }

每个项目都会调用RetreiveVirtualItem,每次调用时都会循环遍历每个患者。您每次都覆盖e.Item,因此每个项都以最后一组值结束

您需要检查e.ItemIndex并只检索该特定行的数据

或者您实际上不想使用虚拟模式,您应该在启动时执行一次查询,然后手动将它们全部添加到列表中

编辑问题之前的答案:

另外,为什么要创建两个ListViewItems?我认为你的代码应该是这样的:

e.Item = new ListViewItem(patientNo);    

if (status.Equals("Yes"))
{
    e.Item.ForeColor = Color.Red;
}

e.Item.SubItems.Add(lastName);

e.Item.SubItems.Add(firstName);
e.Item.SubItems.Add(middleInitial + ".");
e.Item.SubItems.Add(age));
e.Item.SubItems.Add(address + ".");
e.Item.SubItems.Add(type);
e.Item.SubItems.Add(status);   

e、 ToString将项目索引转换为字符串;为什么要将firstName之类的东西传递给这个方法?很抱歉,我在前面的代码中犯了一个错误。。。我已经删除了e.ItemIndex.ToString,因为我传递的已经是一个字符串了……是的,我刚刚编写了该代码,但与前面一样,唯一添加到我的listview的是您显示的代码的最后一个索引,您只添加了一个项。我们需要看看循环。你能编辑这个问题并扩展一下你的代码吗?lastName、firstName等设置在哪里?我已经编辑了我用整个方法发布的第一个代码