2016-07-30 80 views
0

你好,我已经创建了一个自定义列表视图。现在我想在每个项目中添加来自sql的数据。我在mainactivity原代码是这样的:自定义列表视图从数据添加数据

mlistview = FindViewById<ListView>(Resource.Id.myListView); 
mItems = new List<Person>(); 
mItems.Add(new Person() { FirstName = "Dim", LastName = "Chris", Age = "25", Gender = "Male" }); 

MyListViewAdapter adapter = new MyListViewAdapter(this, mItems); 
mlistview.Adapter = adapter; 

现在,我想在我的每一个项目添加从sql.I数据尝试这样的事:

mlistview = FindViewById<ListView>(Resource.Id.myListView); 


SqlCommand sqlCmd = new SqlCommand("SELECT Name,LastName,Age,Gender FROM Members", con); 
SqlDataReader sqlReader = sqlCmd.ExecuteReader(); 
while (sqlReader.Read()) 
{  


mItems = new List<Person>(); 
mItems.Add(new Person() { FirstName = sqlReader["Name"].ToString(), LastName = sqlReader["LastName"].ToString(), Age = sqlReader["Age"].ToString(), Gender = sqlReader["Gender"].ToString() }); 

MyListViewAdapter adapter = new MyListViewAdapter(this, mItems); 
mlistview.Adapter = adapter; 
} 
sqlReader.Close(); 

我只能看到我的最后一个SQL行。但我想看到我所有的SQL行。

回答

0

您正在为创建MyListViewAdapter的实例,每个行都来自查询。每个ListView只需要一个适配器实例。

所以,更换此

while (sqlReader.Read()) 
{  
    mItems = new List<Person>(); 
    mItems.Add(new Person() { FirstName = sqlReader["Name"].ToString(), LastName = sqlReader["LastName"].ToString(), Age = sqlReader["Age"].ToString(), Gender = sqlReader["Gender"].ToString() }); 

    MyListViewAdapter adapter = new MyListViewAdapter(this, mItems); 
    mlistview.Adapter = adapter; 
} 

// List of persons 
mItems = new List<Person>(); 

// Add persons from the query to our list 
while (sqlReader.Read()) 
{  
    mItems.Add(new Person() { FirstName = sqlReader["Name"].ToString(), LastName = sqlReader["LastName"].ToString(), Age = sqlReader["Age"].ToString(), Gender = sqlReader["Gender"].ToString() }); 
} 

// Create an adapter for this list 
MyListViewAdapter adapter = new MyListViewAdapter(this, mItems); 

// Bind the ListView to this adapter 
mlistview.Adapter = adapter; 
+0

谢谢你的工作! – DiH

相关问题