このセクションでは、iOS アプリに FlexGrid コントロールを追加し、そこにデータを追加する方法について説明します。
このトピックは 3 つの手順で構成されます。
次の図は、上記の手順を実行した後の FlexGrid を示しています。

次のCustomer.cs クラスは、FlexGrid コントロールのデータソースとして機能します。
| C# |
コードのコピー
|
|---|---|
public class Customer :
INotifyPropertyChanged,
IEditableObject
{
#region ** fields
int _id, _countryId, _orderCount;
string _first, _last;
string _address, _city, _postalCode, _email;
bool _active;
DateTime _lastOrderDate;
double _orderTotal;
static Random _rnd = new Random();
static string[] _firstNames = "Andy|Ben|Charlie|Dan|Ed|Fred|Gil|Herb".Split('|');
static string[] _lastNames = "Ambers|Bishop|Cole|Danson|Evers|Frommer|Griswold|Heath".Split('|');
static KeyValuePair<string, string[]>[] _countries = "中国-北京|インド-ムンバイ,デリー|アメリカ-ニューヨーク|日本-東京,大阪".Split('|').Select(str => new KeyValuePair<string, string[]>(str.Split('-').First(), str.Split('-').Skip(1).First().Split(','))).ToArray();
static string[] _emailServers = "gmail|yahoo|outlook|aol".Split('|');
static string[] _streetNames = "Main|Broad|Grand|Panoramic|Green|Golden|Park|Fake".Split('|');
static string[] _streetTypes = "ST|AVE|BLVD".Split('|');
static string[] _streetOrientation = "S|N|W|E|SE|SW|NE|NW".Split('|');
public Customer()
: this(_rnd.Next(10000))
{
}
public Customer(int id)
{
Id = id;
FirstName = GetRandomString(_firstNames);
LastName = GetRandomString(_lastNames);
Address = GetRandomAddress();
CountryId = _rnd.Next() % _countries.Length;
var cities = _countries[CountryId].Value;
City = GetRandomString(cities);
PostalCode = _rnd.Next(10000, 99999).ToString();
Email = string.Format("{0}@{1}.com", (FirstName + LastName.Substring(0, 1)).ToLower(), GetRandomString(_emailServers));
LastOrderDate = DateTime.Today.AddDays(-_rnd.Next(1, 365)).AddHours(_rnd.Next(0, 24)).AddMinutes(_rnd.Next(0, 60));
OrderCount = _rnd.Next(0, 100);
OrderTotal = Math.Round(_rnd.NextDouble() * 10000.00, 2);
Active = _rnd.NextDouble() >= .5;
}
public int Id
{
get { return _id; }
set
{
if (value != _id)
{
_id = value;
OnPropertyChanged();
}
}
}
public string FirstName
{
get { return _first; }
set
{
if (value != _first)
{
_first = value;
OnPropertyChanged();
OnPropertyChanged("Name");
}
}
}
public string LastName
{
get { return _last; }
set
{
if (value != _last)
{
_last = value;
OnPropertyChanged();
OnPropertyChanged("Name");
}
}
}
public string Address
{
get { return _address; }
set
{
if (value != _address)
{
_address = value;
OnPropertyChanged();
}
}
}
public string City
{
get { return _city; }
set
{
if (value != _city)
{
_city = value;
OnPropertyChanged();
}
}
}
public int CountryId
{
get { return _countryId; }
set
{
if (value != _countryId && value > -1 && value < _countries.Length)
{
_countryId = value;
//_city = _countries[_countryId].Value.First();
OnPropertyChanged();
OnPropertyChanged("Country");
OnPropertyChanged("City");
}
}
}
public string PostalCode
{
get { return _postalCode; }
set
{
if (value != _postalCode)
{
_postalCode = value;
OnPropertyChanged();
}
}
}
public string Email
{
get { return _email; }
set
{
if (value != _email)
{
_email = value;
OnPropertyChanged();
}
}
}
public DateTime LastOrderDate
{
get { return _lastOrderDate; }
set
{
if (value != _lastOrderDate)
{
_lastOrderDate = value;
OnPropertyChanged();
}
}
}
public TimeSpan LastOrderTime
{
get
{
return LastOrderDate.TimeOfDay;
}
}
public int OrderCount
{
get { return _orderCount; }
set
{
if (value != _orderCount)
{
_orderCount = value;
OnPropertyChanged();
}
}
}
public double OrderTotal
{
get { return _orderTotal; }
set
{
if (value != _orderTotal)
{
_orderTotal = value;
OnPropertyChanged();
}
}
}
public bool Active
{
get { return _active; }
set
{
if (value != _active)
{
_active = value;
OnPropertyChanged();
}
}
}
public string Name
{
get { return string.Format("{0} {1}", FirstName, LastName); }
}
public string Country
{
get { return _countries[_countryId].Key; }
}
public double OrderAverage
{
get { return OrderTotal / (double)OrderCount; }
}
static string GetRandomString(string[] arr)
{
return arr[_rnd.Next(arr.Length)];
}
static string GetName()
{
return string.Format("{0} {1}", GetRandomString(_firstNames), GetRandomString(_lastNames));
}
// ** 静的リストプロバイダ
public static ObservableCollection<Customer> GetCustomerList(int count)
{
var list = new ObservableCollection<Customer>();
for (int i = 0; i < count; i++)
{
list.Add(new Customer(i));
}
return list;
}
private static string GetRandomAddress()
{
if (_rnd.NextDouble() > 0.9)
return string.Format("{0} {1} {2} {3}", _rnd.Next(1, 999), GetRandomString(_streetNames), GetRandomString(_streetTypes), GetRandomString(_streetOrientation));
else
return string.Format("{0} {1} {2}", _rnd.Next(1, 999), GetRandomString(_streetNames), GetRandomString(_streetTypes));
}
// ** 静的値プロバイダ
public static KeyValuePair<int, string>[] GetCountries() { return _countries.Select((p, index) => new KeyValuePair<int, string>(index, p.Key)).ToArray(); }
public static string[] GetFirstNames() { return _firstNames; }
public static string[] GetLastNames() { return _lastNames; }
// このインタフェースにより、境界コントロールがデータオブジェクトの変更に反応することができます。
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
PropertyChanged(this, e);
}
// このインターフェイスでは、トランザクションによる編集が可能です(ユーザーは Esc を押して以前の値を復元できます)。
Customer _clone;
public void BeginEdit()
{
_clone = (Customer)this.MemberwiseClone();
}
public void EndEdit()
{
_clone = null;
}
public void CancelEdit()
{
if (_clone != null)
{
foreach (var p in this.GetType().GetRuntimeProperties())
{
if (p.CanRead && p.CanWrite)
{
p.SetValue(this, p.GetValue(_clone, null), null);
}
}
}
}
}
|
|
C# でFlexGrid コントロールを初期化するには、次の手順を実行します。

FlexGrid コントロールを初期化するには、ソリューションエクスプローラーから ViewController ファイルを開き、その内容を次のコードで置き換えます。これは、FlexGrid を初期化するために、View コントローラの viewDidLoad メソッドをオーバーライドします。
| C# |
コードのコピー
|
|---|---|
public partial class GettingStartedController: UIViewController { FlexGrid grid; public GettingStartedController (IntPtr handle) : base (handle) { } public override void ViewDidLoad() { base.ViewDidLoad(); grid = new FlexGrid(); grid.ItemsSource = Customer.GetCustomerList(100); } public override void ViewDidLayoutSubviews() { base.ViewDidLayoutSubviews(); grid.Frame = new CGRect(this.View.Frame.X, this.View.Frame.Y, this.View.Frame.Width, this.View.Frame.Height); } } |
|
F5 を押してアプリケーションを実行します。