我在我的Xamarin android应用程序中使用了一个简单的wcf Web服务。我有GetAllUser函数来从数据库中检索所有用户。
我可以使用我的Xamarin android应用程序插入用户。 但我对如何在我的Xamarin android中绑定从Web服务检索到的数据与spinner控件一无所知。 我在互联网上搜索了很多地方,但我仍无法用网络服务绑定我的微调器。
namespace WcfServiceSunday
{
public class ServiceSunday : IServiceSunday
{
public List<Employee> GetAllEmployee()
{
List<Employee> employee = new List<Employee>();
string constring = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
SqlConnection con = new SqlConnection(constring);
con.Open();
string qry = "select * from EmpDetail";
SqlCommand cmd = new SqlCommand(qry, con);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
Employee emp = new Employee();
emp.EmpNo = dr.GetInt32(0);
emp.Name = dr.GetString(1);
emp.Empcode = dr.GetString(2);
emp.keywords = dr.GetString(3);
emp.mobile = dr.GetString(4);
employee.Add(emp);
}
con.Close();
return employee;
}
以上是我的网络服务,用于从数据库中选择所有用户。 我想绑定微调器并在我的微调器控件中显示用户名。
以下是我的按钮点击事件以填充微调器。
btn.Click += (sender, e) => {
Employee emp = new Employee();
GridView grdvw = FindViewById<GridView>(Resource.Id.grd);
IList<Employee> employ = new List<Employee>();
employ = sc.GetAllEmployee("");
Spinner sp = FindViewById<Spinner>(Resource.Id.spinner);
sp.Adapter = new ArrayAdapter(this,Android.Resource.Layout.SimpleSpinnerItem ,employ.ToList());
};
我可以使用Web服务填充微调器,但是在spineer中显示数据 就像:
"WcfServiceSunday.Employee"
我将上面的内容作为微调器中的值下拉而不是用户的名称 在我的数据库中。
如何使用用户名填充微调器?
答案 0 :(得分:1)
除非使用MvvmCross或QuickCross之类的东西进行数据绑定,否则无法绑定它。但是,与Android一样,您必须创建一个Adapter
来填充View
,例如ListView
,Spinner
或GridView
。这很容易做到:
public class MySpinnerAdapter : ArrayAdapter<Employee>
{
private readonly int _resource;
private readonly int _resourceId;
public MySpinnerAdapter(Context context, int resource, int textViewResourceId, IList<Employee> objects)
: base(context, resource, textViewResourceId, objects)
{
_resource = resource;
_resourceId = textViewResourceId;
}
public override View GetDropDownView(int position, View convertView, ViewGroup parent)
{
var inflater = LayoutInflater.FromContext(Context);
var view = convertView ?? inflater.Inflate(_resource, parent, false);
var textView = view.FindViewById<TextView>(_resourceId);
textView.Text = GetItem(position).Name;
return view;
}
}
spinneritem.axml:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinnerText"
android:ellipsize="marquee"
android:textAppearance="?android:attr/textAppearanceLarge"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:color="#ffffff" />
因此,使用上面的代码,您可以使用以下简单的代码片段填充您的Spinner:
var spinner = FindViewById<Spinner>(Resource.Id.spinner);
spinner.Adapter = new MySpinnerAdapter(this, Resource.Layout.spinneritem, Resource.Id.spinnerText, _serviceSunday.GetAllEmployee());
spinner.ItemSelected += (s, e) =>
{
//Do something with the selected item
//get the position with e.Position
}
鉴于_serviceSunday
是ServiceSunday
类的实例。
您当然可以根据自己的喜好自定义微调器项目,向其中添加更多信息等。只需记住在Adapter
中反映这些更改。