0

テーブル「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;

しかし、アプリケーションを実行すると、ピッカービューが空白になります。何か不足していますか?ロジックのどこにエラーがありますか?

ありがとう。

4

1 に答える 1

0

ピッカーの使用方法の一例は、「キッチン シンク」サンプルにあります - https://github.com/xamarin/monotouch-samples/tree/master/MonoCatalog-MonoDevelop - 特にhttps://github.com/xamarin /monotouch-samples/blob/master/MonoCatalog-MonoDevelop/PickerViewController.xib.cs

一般に、多くの mt dev タスクにはそのレポが不可欠であることがわかります。

于 2012-07-07T16:42:47.847 に答える