[英]Filter on subcategories from csv file ---Xamarin forms
我想对子类别应用过滤器以列出与子类别匹配的项目。 例如,如果我选择“Diamond Men”子类别,它会显示所有以“Diamond Men”为子类别的项目列表。 我试过使用 Linq,但没有成功。 我在此处添加带有 CSV 数据图像的代码,如果您需要整个代码,请告诉我,我将共享 GitHub 链接。 先感谢您。
代码
Xaml
<Picker x:Name="picker4"
Title="Select a SubCategory"
TitleColor="#259" SelectedIndexChanged="picker4_SelectedIndexChanged">
<Picker.ItemsSource>
<x:Array Type="{x:Type x:String}">
<x:String>Men Wedding Band</x:String>
<x:String>White Gold Men</x:String>
<x:String>Black Diamond Men</x:String>
</x:Array>
</Picker.ItemsSource>
</Picker>
</StackLayout>
<ListView x:Name="listview2" HasUnevenRows="True" IsVisible="false" ItemSelected="listview2_ItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Padding="18">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Label Text="{Binding prod_img}" TextColor="#289" Grid.RowSpan="2" Grid.Column="0" Grid.Row="0" HeightRequest="80"
WidthRequest="80" />
<Label Text="{Binding prod_name}" TextColor="Black" FontSize="Medium" FontAttributes="Bold" Grid.Column="1"/>
<Label Text="{Binding prod_price}" TextColor="Black" Grid.Row="1"
Grid.Column="1" LineBreakMode="TailTruncation"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Xaml.cs
private Task<List<csv>> filelist()
{
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(MainPage)).Assembly;
Stream stream = assembly.GetManifestResourceStream("Todolist.WP.csv");
List<csv> lstSample = new List<csv>();
using (var reader = new System.IO.StreamReader(stream))
{
if (reader != null)
{
using (var csvReader = new CsvReader(reader, CultureInfo.CurrentCulture))
{
while (csvReader.Read())
{
lstSample.Add(new csv
{
//prod_id = csvReader.GetField<string>(0),
prod_name = csvReader.GetField<string>(2),
prod_img = csvReader.GetField<string>(18),
prod_price = csvReader.GetField<int>(13),
prod_desc = csvReader.GetField<string>(3),
prod_m_w = csvReader.GetField<string>(6),
Prod_cate= csvReader.GetField<string>(5)
});
//var todoItem = (task)BindingContext;
}
}
}
}
return Task.FromResult(lstSample);
}
private void picker4_SelectedIndexChanged(object sender, EventArgs e)
{
var jo = filelist().Result;
if(picker3.SelectedIndex == 0)
{
//code for filtering here
}
}
您的 CSV 数据在 subcat 列中包含多个值,因此无法进行精确的字符串比较。 试试这个
var result = jo.Where(x => x.Prod_cate.Contains(picker3.SelectedItem)).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.