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();
}
}
}
您在此处显示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);
}
注意:该代码未经测试,仅应被视为伪代码。