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

  1. 您需要先从DataTable获取每个项目数据,
  2. 然后您可以为 ListView 的每个 ListItem 添加它们。
  3. 最后,您可以将 ListItems 设置为 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; }
    }