我有一个带有表'BikeInfo'的sqlite数据库
[BikeID, BikeName]
现在我希望我的pickerview 填充这个数据库中的自行车名称。在 .Net 中,这很容易。但是作为 MonoTouch 的一个完整的初学者,我不知道如何解决这个问题。我做了一些谷歌搜索,发现我必须创建某种从该类扩展的自定义UIPickerViewModel
类并覆盖其各种方法。但仅此而已。我找不到任何示例代码、教程或任何东西。我已经为此奋斗了三天。我完全糊涂了。到目前为止,我已经编写了一个函数,它从表中获取数据并返回一个类对象列表[我编写的包含属性 BikeName 和 BikeId]。也许我在寻找所有错误的地方。但我需要以任何方式完成这项工作。
任何类型的教程或 C# 中处理此特定目标场景的示例代码都会对我有所帮助。
下一个目标是在用户触摸一个特定项目时显示一条警报消息,显示相应的自行车 ID。我认为我们必须在该自定义类中定义选定的事件。这是我从互联网上挑选的。
谢谢。
这是我到目前为止所做的。我创建了一个包含属性BikeID
和BikeName
.
namespace ASTONAPP
{
public class PickerFacilityTemplate
{
public PickerFacilityTemplate ()
{
}
public int BikeID{get; set;}
public string BikeName{get; set;}
}
}
之后,我在我的数据库处理程序类中编写了该函数,该函数返回上述类类型的类对象列表。
public List<PickerFacilityTemplate> FetchFacility()
{
DataSet ds = new DataSet ();
string sql = "select * from BikeInfo order by BikeName";
this.CreateDBConnection ();
SqliteDataAdapter sda = new SqliteDataAdapter (sql, sconn);
sda.Fill (ds);
List<PickerFacilityTemplate> objfcl=new List<PickerFacilityTemplate>();
for(int i=0; i<ds.Tables[0].Rows.Count; i++)
{
PickerFacilityTemplate pft=new PickerFacilityTemplate();
pft.BikeID=Convert.ToInt32(ds.Tables[0].Rows[i]["BikeID"].ToString());
pft.BikeName=ds.Tables[0].Rows[i]["BikeName"].ToString ();
objfcl.Add (pft);
}
this.CloseDBConnection ();
return objfcl.ToList ();
}
public class PickerDataModelSource: UIPickerViewModel
{
public PickerDataModelSource ()
{
}
public PickerDataModelSource (List<PickerFacilityTemplate> lst)
{
this.Items=lst;
}
public event EventHandler<EventArgs> ValueChanged;
public List<PickerFacilityTemplate> Items;
List<PickerFacilityTemplate> _items = new List<PickerFacilityTemplate>();
public PickerFacilityTemplate SelectedItem
{
get
{
return this._items[this._selectedIndex];
}
}
public int _selectedIndex = 0;
public override int GetRowsInComponent (UIPickerView picker, int component)
{
return this._items.Count;
}
public override string GetTitle (UIPickerView picker, int row, int component)
{
return items[row].BikeName.ToString();
}
public override int GetComponentCount (UIPickerView picker)
{
return 1;
}
public override void Selected(UIPickerView picker, int row, int component)
{
this._selectedIndex = row;
if (this.ValueChanged != null)
{
this.ValueChanged (this, new EventArgs ());
}
}
}
现在在我有pickerview的屏幕的类文件中,我写了,
PickerDataModelSource _pickerSource;
并在ViewDidLoad
方法中:
this.Picker.Source=this._pickerSource;
this.Picker.Model=this._pickerSource;
但是当我运行应用程序时,我的pickerview 是空白的。我错过了什么吗?我的逻辑错误在哪里?
谢谢。