テーブル「BikeInfo」を持つsqliteデータベースがあります
[BikeID, BikeName]
ここで、ピッカービューにこのデータベースのバイクの名前を入力したいと考えています。.Net ではとても簡単でした。しかし、MonoTouch の完全な初心者である私は、この問題にどのように対処すればよいかわかりません。グーグルで調べたところ、クラスから拡張されたある種のカスタムクラスを作成し、UIPickerViewModel
そのさまざまなメソッドをオーバーライドする必要があることがわかりました。しかし、それはそれについてです。サンプルコード、チュートリアルなどは見つかりませんでした。私は今3日間これと戦っています。私は完全に混乱しています。ここまでで、テーブルからデータをフェッチし、クラス オブジェクトのリストを返す関数を作成しました [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;
しかし、アプリケーションを実行すると、ピッカービューが空白になります。何か不足していますか?ロジックのどこにエラーがありますか?
ありがとう。