Добавить несколько datatable и tabitem.content для каждого tabitem в tabcontrol - PullRequest
0 голосов
/ 15 ноября 2018
    This is my xmal code for tabcontrol 
    <TabControl  x:Name="tabControl1" Grid.Row="2"  Height="auto" Width="auto" ItemsSource="{Binding tabs}" SelectionChanged="tabControl1_SelectionChanged" SelectedItem="{Binding SelectedEvaluation}" TabStripPlacement="Top" >
                <TabControl.ContentTemplate >
                    <DataTemplate>
                        <DataGrid x:Name="dataGrid1" IsReadOnly="True" Height="auto" Width="auto" ItemsSource="{Binding}" AutoGenerateColumns="False" >
                            <DataGrid.Columns>
                                <DataGridTextColumn Width="*" Header="Day"  Binding="{Binding [Day]}"/>
                                <DataGridTextColumn Width="*" Header="Date" Binding="{Binding [Date]}"/>
                                <DataGridTextColumn Width="*" Header="Time" Binding="{Binding [Time]}"/>
                                <DataGridTextColumn Width="*" Header="Lat" Binding="{Binding [Lat]}"/>
                                <DataGridTextColumn Width="*" Header="Long" Binding="{Binding [Long]}"/>
                                <DataGridTextColumn Width="*" Header="Address" Binding="{Binding [Address]}"/>
                                <DataGridTextColumn Width="*" Header="Accuracy" Binding="{Binding [Accuracy]}"/>
                                <DataGridTextColumn Width="*" Header="Type" Binding="{Binding [Type]}"/>
                            </DataGrid.Columns>
                        </DataGrid>
                    </DataTemplate>
                </TabControl.ContentTemplate>
            </TabControl>


And this is my code to create tabs
public void LoadData()
{
    sy.OpenFileDialog op = new sy.OpenFileDialog();
    op.Multiselect = true;

    if (op.ShowDialog() == sy.DialogResult.OK)
    {
        for each (string s in op.FileNames)
        {
            val = s;
            values = s.Split('\\');
            lastItem = values[values.Length - 1];                   
            newTabItem = new TabItem
            {
                Header = lastItem,
            };
            tabControl1.Items.Add(newTabItem);
            ReadJsonFile();                   

            DataTable dt = new DataTable();
            dt.Columns.Add("Day", typeof(string));
            dt.Columns.Add("Date", typeof(string));
            dt.Columns.Add("Time", typeof(string));
            dt.Columns.Add("Lat", typeof(string));
            dt.Columns.Add("Long", typeof(string));
            dt.Columns.Add("Address", typeof(string));
            dt.Columns.Add("Type", typeof(string));

            foreach (var item in data)
            {
                dt.Rows.Add(item.getDay(), item.getDate(), item.getTime(), item.getLat(), item.getLongi(), item.getAddresst(), item.getTYpe());                    
            }
            newTabItem.Content =  dt;

        }
    }
}

public void ReadJsonFile()
{
    string json = string.Empty;

    using (StreamReader r = new StreamReader(val))
    {
        json = r.ReadToEnd();
        var test = JObject.Parse(json);
        JArray items = (JArray)test["locations"];
        int length = items.Count;
        data = new List<Info>();

        for (int i = 0; i < items.Count; i++)
        {
            var d = test["locations"][i]["timestampMs"];
            double dTimeSpan = Convert.ToDouble(d);
            DateTime dtReturn = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Math.Round(dTimeSpan / 1000d)).ToLocalTime();
            string printDate = dtReturn.DayOfWeek.ToString() + "," + " " + dtReturn.ToShortDateString() + " " + dtReturn.ToShortTimeString();
            day = dtReturn.DayOfWeek.ToString();
            date = dtReturn.ToShortDateString();
            time = dtReturn.ToShortTimeString();
            var e = test["locations"][i]["latitudeE7"];
            var f = test["locations"][i]["longitudeE7"];
            //getLocationByGeoLocation(e.ToString(), f.ToString());                   
            var g = test["locations"][i]["activity"] != null;

            if (g == true)
            {
                JArray items1 = (JArray)test["locations"][i]["activity"];
                int length1 = items1.Count;

                while (j < items1.Count )
                {
                    if(j == 0)
                    { 
                        var h = test["locations"][i]["activity"][j]["activity"][j]["type"];
                        type = h.ToString();
                        j = 1;
                    }
                    else { }
                j++;
            }
            j = 0;
        }
        else { }

        Info ddm = new Info(day, date, time, lat, longi, address, type);
        data.Add(ddm);                   
    }
}
return;

}

Теперь я хочу, чтобы при создании каждой новой вкладки создавалась таблица данных для каждой вкладки.напримересли я создаю 5 вкладок, то для каждой вкладки необходимо открыть новую таблицу данных и содержимое элемента вкладки, потому что я хочу применить фильтр ко всем вкладкам, но если две вкладки открыты, тогда я могу применить фильтр только к последней открытой вкладке.

Это изображение показывает, что две вкладки открыты, но когда я применяю фильтр, первая вкладка не может фильтровать введите описание изображения здесь

И применяется фильтр на последней вкладке введите описание изображенияздесь

Я не знаю, как это сделать, пожалуйста, помогите мне

1 Ответ

0 голосов
/ 15 ноября 2018

Я запутался с вашим опубликованным образцом

Вы связываете tabcontrol itemsource с вкладками, но я не видел, где вы устанавливаете свойство tabs в коде. Далее Когда вы отправляете источник предметов, где находится ваш Itemtemplate? Далее LoadData описывает, что вы непосредственно добавляете элементы в tabControl, а не добавляете в свойство tabs.

Пожалуйста, следуйте простым шагам, указанным ниже. 1. Заполните свойство вкладок в данных загрузки. Обратите внимание, что свойство tabs создается как Observable collection. Также Вам не следует создавать свойство как набор данных (список данных), я бы предложил создать простой класс со свойством Notify. 2. Свяжите свойство вкладок с источником элементов tabControl 3. Определите шаблон элемента для tabControl Вот и все.

Пожалуйста, отмените ваше требование. сначала создайте набор данных (я бы предложил создать ObservableCollection). привязать его к tabControl. так что вы получите один tabitem за элемент в свойстве tab. Далее вы хотите применить фильтр. это просто. GetSelectedItem и применить ваш фильтр. и сбросить фильтр для предыдущего элемента. Вы можете получить предыдущий и текущий selectedItem в аргументах события SelectoinChange.

Надеюсь, что это будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...