我正在编写一个Xamarin应用,该应用具有从HTML表中获取一些数据的功能。然后,我想以某种方式在我的应用程序中显示此数据;目前,我正在考虑使用ListView,但是我对其他选择持开放态度。
在我的网络抓取原型中,我只是使用HtmlAgility抓取了HTML表,然后遍历行并将其插入到DataTable
中:
foreach (HtmlNode row in table.SelectNodes("tr"))
{
DataRow dr = dt.NewRow();
int counter = 1;
foreach (HtmlNode cell in row.SelectNodes("td"))
{
switch (counter)
{
case 1:
dr["Column1"] = cell.InnerText;
break;
case 2:
dr["Column2"] = cell.InnerText;
break;
case 3:
dr["Column3"] = cell.InnerText;
break;
case 4:
dr["Column4"] = cell.InnerText;
break;
case 5:
dr["Column5"] = cell.InnerText;
break;
case 6:
dr["Column6"] = cell.InnerText;
break;
case 7:
dr["Column7"] = cell.InnerText;
break;
}
counter++;
}
dt.Rows.Add(dr);
}
我认为使用DataTable对于移动应用程序不是很明智(甚至可能吗?)。
目前,我正在考虑使用SQLite-Net创建本地数据库并将HTML表中的记录插入数据库表中。
这是一种明智的方法,我将如何使用SQLite做到这一点?
答案 0 :(得分:0)
您的最佳选择将是。
首先,声明一个对象以表示Listview的每一行,
示例:
public class Element
{
public string Element1 {get; set;}
public string Element2 {get; set;}
}
在这里,您将拥有元素的每一行,并在列表视图的各列中显示不同的数据。
public class Element
{
public string Element1 {get; set;}
public string Element2 {get; set;}
}
然后,在ViewModel中,声明用于存储项目的列表。
public ObvervableCollection<Element> MyItems = new ObservableCollection();
此后,在您的Page.xaml中,声明一个列表视图,记下Header,以显示Table Headers,然后在视单元格中显示要显示的元素
<ListView x:Name=”MainListView” ItemsSource={Binding MyItems}>
<ListView.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Text=”Column1" Grid.Column="0"/>
<Label Text=”Column2" Grid.Column="1"/>
</Grid>
</DataTemplate>
</ListView.HeaderTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Text=”{Binding Element1}" Grid.Column="0"/>
<Label Text=”{Binding Element2}" Grid.Column="1"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>