我有一个 sqlite 数据库,其中包含一个表'BikeInfo'
[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 ());
}
}
}
现在在我有选择器视图的屏幕的类文件中,我写了,
PickerDataModelSource _pickerSource;
并在ViewDidLoad
方法中:
this.Picker.Source=this._pickerSource;
this.Picker.Model=this._pickerSource;
但是当我运行应用程序时,我的选择器视图是空白的。我错过了什么吗?我逻辑中的错误在哪里?
感谢。
答案 0 :(得分:0)
如何使用选择器的一个例子是“厨房水槽”样本 - https://github.com/xamarin/monotouch-samples/tree/master/MonoCatalog-MonoDevelop - 尤其是https://github.com/xamarin/monotouch-samples/blob/master/MonoCatalog-MonoDevelop/PickerViewController.xib.cs
一般来说,我发现repo对很多mt dev任务都很重要。