问题描述
如何像我一样在 DataTable
中将 Listview
转换或使用 Xamarin.Android
显示在我的图片中,请帮助我...
请注意,我使用的是 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
获取每个项目的数据, - 然后您可以为
ListItem
的每个ListView
添加它们。 - 最后,您可以将
ListItem
设置为 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; }
}