C#Listview存储过程

本文关键字:存储过程 C#Listview | 更新日期: 2023-09-27 18:29:42

我在ListView+数据库中遇到了这个问题。

我的问题是:为什么我的ListView显示2个用户名列和1封电子邮件,而不是用户名、代码、电子邮件(我在表单的ListView中制作了用户名、代码和电子邮件列)。。

您可以看到我编写的存储过程和下面的C#代码。。

PS。我使用Visual Studio 2012。

我不知道我做错了什么:/

希望有一个简单的方法:)

我的存储过程:

CREATE PROCEDURE SP_ShowFamily
as
    SELECT 
       username, code, email
    FROM 
       Family
    ORDER BY 
       username

当我用我的c#代码运行它时,它会显示两次用户名和电子邮件。非"代码"

我的C#代码:

 public void GetData()
 {
        datareader = null;
        sqlCommand.Parameters.Clear();
        sqlCommand.CommandText = "SP_ShowFamily";
        try
        {
            sqlConnenction.Open();
            datareader = sqlCommand.ExecuteReader();
            ListViewItem itmx;
            while (datareader.Read())
            {
                itmx = new ListViewItem();
                itmx.Text = datareader.GetValue(0).ToString();
                for (int i = 0; i < datareader.FieldCount; i++)
                {
                    itmx.SubItems.Add(datareader.GetValue(i).ToString());
                }
                listView1.Items.Add(itmx);
            }
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        finally
        {
            if (datareader != null)
            {
                datareader.Close();
            }
            if (sqlConnenction.State == ConnectionState.Open)
            {
                sqlConnenction.Close();
            }
        }
    }

C#Listview存储过程

您在此处显示username一次(在第一列ListView中):

itmx.Text = datareader.GetValue(0).ToString();

然后再次当i是第一子项(第二ListView列)中的0时:

itmx.SubItems.Add(datareader.GetValue(i).ToString());

尝试将for循环更改为从i = 1开始。

首先获取DataReader列并将它们分配给ListView:

for(int i=0;i<datareader.FieldCount;i++)
{
   ListView1.Columns.Add(datareader.GetName(i));
}

然后在ListView:中插入数据记录

string[] arr = new string[datareader.FieldCount];
ListViewItem itmx;
while (datareader.Read())
{
    for(int i=0;i<datareader.FieldCount;i++)
    {
        arr[i]=datareader.GetValue(i).ToString();
    }
    itmx = new ListViewItem();
    listView1.Items.Add(itmx);
}

注意:该代码未经测试,仅应被视为伪代码。