Xamarin.Android 如何将 DataTable 转换为 ListView 适配器
How to Convert DataTable to ListView Adapter in Xamarin.Android
如何像我一样在 Xamarin.Android
中将 DataTable
转换或用于 Listview
显示在我的照片中请帮助我...
注意我用的是Xamarin.Android
不是Xamarin.Forms
这是我的代码:
namespace CRM.PL
{
[Activity(Label = "AC_Expense_Search")]
public class AC_Expense_Search : Activity
{
ListView listView1;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.L_Expense_Search);
// Create your application here
//**********************************************
listView1 = FindViewById<ListView>(Resource.Id.listView1);
//**************** Load Data ****************************
LoadData();
//**************** Event ****************************
}
public DataTable DataTableCollection { get; set; }
void LoadData()
{
DataTable dt = cls_Epense.Expense_select_Top10();
DataTableCollection = dt;
listView1.Adapter = dt;
}
}
}
您不能直接为 ListView.Adapter 设置 DataTable
。
- 您需要先从
DataTable
获取每个项目数据,
- 然后您可以为
ListView
的每个 ListItem
添加它们。
- 最后,您可以将
ListItem
s 设置为 ListView Adapter 的数据。
例如:
void LoadData()
{
DataTable dt = cls_Epense.Expense_select_Top10();
DataTableCollection = dt;
List<ListItem> listItems = new List<ListItem>();
for (int i = 0; i < dt.Rows.Count; i++)
{
ListItem listitem = new ListItem();
listitem.FirstParamater = dt.Rows[i][0].ToString();
listitem.SecondParamater = dt.Rows[i][1].ToString();
listitem.ThirdParamater = dt.Rows[i][2].ToString();
...
listItems.Add(listitem);
}
listviewAdapter = new ListViewAdapter(this, listItems );
listView1.Adapter = listviewAdapter;
}
ListItem的示例代码,您需要为您的项目定制需要的ListItem
。
public class ListItem
{
public string FirstParamater { get; set; }
public string SecondParamater { get; set; }
public string ThirdParamater { get; set; }
}
没用!
当我 运行 应用程序时,它给我这个错误:
System.ArgumentOutOfRangeException
: '索引超出范围。必须为非负数且小于集合的大小。
参数名称:index'
这是我的代码:
void LoadData()
{
DataTable dt = cls_Epense.Expense_select_Top10();
List<Expense_Search> listItems = new List<Expense_Search>();
for (int i = 0; i < dt.Rows.Count; i++)
{
listItems[i].FirstParamater = dt.Rows[i][0].ToString();
listItems[i].SecondParamater = dt.Rows[i][1].ToString();
listItems[i].ThirdParamater = dt.Rows[i][2].ToString();
}
var adapter = new ArrayAdapter<Expense_Search>(this,Android.Resource.Layout.SimpleListItem1, listItems);
listView1.Adapter = adapter;
}
public class Expense_Search
{
public string FirstParamater { get; set; }
public string SecondParamater { get; set; }
public string ThirdParamater { get; set; }
}
如何像我一样在 Xamarin.Android
中将 DataTable
转换或用于 Listview
显示在我的照片中请帮助我...
注意我用的是Xamarin.Android
不是Xamarin.Forms
这是我的代码:
namespace CRM.PL
{
[Activity(Label = "AC_Expense_Search")]
public class AC_Expense_Search : Activity
{
ListView listView1;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.L_Expense_Search);
// Create your application here
//**********************************************
listView1 = FindViewById<ListView>(Resource.Id.listView1);
//**************** Load Data ****************************
LoadData();
//**************** Event ****************************
}
public DataTable DataTableCollection { get; set; }
void LoadData()
{
DataTable dt = cls_Epense.Expense_select_Top10();
DataTableCollection = dt;
listView1.Adapter = dt;
}
}
}
您不能直接为 ListView.Adapter 设置 DataTable
。
- 您需要先从
DataTable
获取每个项目数据, - 然后您可以为
ListView
的每个ListItem
添加它们。 - 最后,您可以将
ListItem
s 设置为 ListView Adapter 的数据。
例如:
void LoadData()
{
DataTable dt = cls_Epense.Expense_select_Top10();
DataTableCollection = dt;
List<ListItem> listItems = new List<ListItem>();
for (int i = 0; i < dt.Rows.Count; i++)
{
ListItem listitem = new ListItem();
listitem.FirstParamater = dt.Rows[i][0].ToString();
listitem.SecondParamater = dt.Rows[i][1].ToString();
listitem.ThirdParamater = dt.Rows[i][2].ToString();
...
listItems.Add(listitem);
}
listviewAdapter = new ListViewAdapter(this, listItems );
listView1.Adapter = listviewAdapter;
}
ListItem的示例代码,您需要为您的项目定制需要的ListItem
。
public class ListItem
{
public string FirstParamater { get; set; }
public string SecondParamater { get; set; }
public string ThirdParamater { get; set; }
}
没用!
当我 运行 应用程序时,它给我这个错误:
System.ArgumentOutOfRangeException
: '索引超出范围。必须为非负数且小于集合的大小。
参数名称:index'
这是我的代码:
void LoadData()
{
DataTable dt = cls_Epense.Expense_select_Top10();
List<Expense_Search> listItems = new List<Expense_Search>();
for (int i = 0; i < dt.Rows.Count; i++)
{
listItems[i].FirstParamater = dt.Rows[i][0].ToString();
listItems[i].SecondParamater = dt.Rows[i][1].ToString();
listItems[i].ThirdParamater = dt.Rows[i][2].ToString();
}
var adapter = new ArrayAdapter<Expense_Search>(this,Android.Resource.Layout.SimpleListItem1, listItems);
listView1.Adapter = adapter;
}
public class Expense_Search
{
public string FirstParamater { get; set; }
public string SecondParamater { get; set; }
public string ThirdParamater { get; set; }
}