繁体   English   中英

从 csv 文件过滤子类别 ---Xamarin 表单

[英]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数据

您的 CSV 数据在 subcat 列中包含多个值,因此无法进行精确的字符串比较。 试试这个

var result = jo.Where(x => x.Prod_cate.Contains(picker3.SelectedItem)).ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM