使用来自iPhone应用程序中的Sqlite DataBase的数据填充UIPickerView -

时间:2012-07-07 06:04:19

标签: c# iphone sqlite xamarin.ios

我有一个 sqlite 数据库,其中包含一个表'BikeInfo'

[BikeID, BikeName]

现在我希望我的pickerview可以填充来自此数据库的自行车名称。在.Net中它很容易。但作为MonoTouch的完全初学者,我不知道如何解决问题。我做了一些谷歌搜索,发现我必须创建某种自定义类,从UIPickerViewModel类扩展并覆盖其各种方法。但那是关于它的。我找不到任何示例代码,教程或任何东西。我已经和他争斗了三天了。我完全糊涂了。到目前为止,我已经编写了一个函数,它从表中获取数据并返回一个类对象列表[我写的包含属性BikeName和BikeId]。也许我正在寻找所有错误的地方。但我需要以任何方式完成任务。

C#中的任何类型的教程或示例代码都会对我有所帮助。

下一个目标是在用户触摸某个特定项目时显示一条警告消息,显示相应的自行车ID。我认为我们必须在该自定义类中定义所选事件。我从互联网上挑选了这么多。

感谢。


这是我到目前为止所做的。我创建了一个包含属性BikeIDBikeName

的类
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;

但是当我运行应用程序时,我的选择器视图是空白的。我错过了什么吗?我逻辑中的错误在哪里?

感谢。

1 个答案:

答案 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任务都很重要。