none
Кривое отображение коллекции в DataGrid ? RRS feed

  • Общие обсуждения

  • Всем доброго времени суток, есть у меня коллекция в которой храниться массив данных, вот только он отображаеться не так как мне нужно, как исправить данную ошибку, есть такой код:

    <DataGrid x:Name="dataGrid1" ItemsSource="{Binding}"  DataContext="{Binding ElementName=mainWindow, Path=tests}" AutoGenerateColumns="False"
                                  HorizontalAlignment="Left" VerticalAlignment="Top" Height="304" Width="548">
                            <DataGrid.Columns>
                                <DataGridTextColumn Header="Test" Binding="{Binding result[0]}" />
                                <DataGridTextColumn Header="Test" Binding="{Binding result[1]}" />
                                <DataGridTextColumn Header="Test" Binding="{Binding result[2]}" />
                                <DataGridTextColumn Header="Test" Binding="{Binding result[3]}" />
                            </DataGrid.Columns>
                        </DataGrid>
    public class test
        {
           
            public float[] result { get; set; }
        };
    
     public ObservableCollection<test> tests { get; private set; } = new ObservableCollection<test>();
          
            public MainWindow()
            {  DataContext = tests;
                float[] res_val_m = new float[] { 2700, 2100, 1300, 1000, 30000, 30000, 30000, 20000};
                float[] res_val_p = new float[] { 3500, 3000, 2200, 2000, 40000, 40000, 40000, 30000};
            }
    
    
    
    for (int i = 0; i < 4; i++)
                {
                    float[] objj = new float[8];
                       objj[i] = 1 - (List[i].Pm / res_val_m[i]) - (List[i].Pp / res_val_p[i]);
                       tests.Add(new test {result = objj});
                }

    Не надо концентрировать свое внимание на том что я вывожу данные так {Binding result[0]} {Binding result[1]} {Binding result[2]} {Binding result[3]}
    Это я себе для примера делал. 

    Вопрос в том почему в одном столбце я не могу вывести весь массив ? если убрать {Binding result} индекс массива в ячейках отображается какой тип используется.

     

    Тоесть видно что в 1-й колонке только 1 значение из массива который мы выводим индексом, а остальные забиваются нулями. Хочется чтобы вместо нулей были мои данные по порядку, большое спасибо за ответ
    1 декабря 2015 г. 11:29

Все ответы

  • Разобрался по поводу своих нулей, извиняюсь был невнимателен, объявил добавление в коллекцию в цикле, отсюда такой эффект. 

     float[] objj = new float[8];
                for (int i = 0; i < 4; i++)
                {
                    
                       objj[i] = 1 - (List[i].Pm / res_val_m[i]) - (List[i].Pp / res_val_p[i]);
                       
                }
                tests.Add(new test { result = objj });
            }
    Выводим из коллекции и получаем только индексируемые данные. Вопрос прежний можно по порядку выводить данные ? 

    1 декабря 2015 г. 11:38
  • Добрый день.

    Коллега, какие-то расчеты, непонятные данные. Приведите маленький пример: "вот у меня массивы с данными 1, 2, 3... Вот таким XAML они в интерфейсе отображаются так <картинка с 1, 2, 3> а мне надо вот так <картинка или нормальное текстовое описание>. Что делать?"

    И тогда вам постараются помочь.

    2 декабря 2015 г. 7:05
    Отвечающий
  • Добрый день.

    Коллега, какие-то расчеты, непонятные данные. Приведите маленький пример: "вот у меня массивы с данными 1, 2, 3... Вот таким XAML они в интерфейсе отображаются так <картинка с 1, 2, 3> а мне надо вот так <картинка или нормальное текстовое описание>. Что делать?"

    И тогда вам постараются помочь.

    Здравствуйте, отображается вот так А хочу чтобы отображалось вот так :

    Тоесть отображение массива в одном столбике по порядку а не в разных.

    P.s - если не трудно загляните еще в одну мою тему Две коллекции в одной таблице

    Большое спасибо за вашу помощь.

    2 декабря 2015 г. 8:13
  • Всем доброго времени суток, с проблемой почти разобрался, но опять уперся в неправильное отображение данных, из за чего вылетают конвертера и т.д.

    namespace TestF
    {
        public class test
        {
            public float resm { get; set; }
            public float[] resp { get; set; }
            public float[] result { get; set; }
            public str_pereval pereval { get; set; }
        };
    
    
    
        public class str_pereval                      //Класс данных валков
        {
            public int nk { get; set; } //Номер клети
       
        };
        public partial class MainWindow : Window
        {
            public ObservableCollection<test> List { get; private set; } = new ObservableCollection<test>();
            public ObservableCollection<str_pereval> List1 { get; private set; } = new ObservableCollection<str_pereval>();
            public MainWindow()
            {
                InitializeComponent();
                DataContext = List;
            }
    
            private void button_Click(object sender, RoutedEventArgs e)
            {
                List.Clear();
                List1.Clear();
                int counter = 0;
                float[] res_val_m = new float[] { 2700, 2100, 1300, 1000, 30000, 30000, 30000, 20000 };
                float[] res_val_p = new float[] { 3500, 3000, 2200, 2000, 40000, 40000, 40000, 30000 };
                float[] tet = new float[] { 5, 10, 60, 800, 544, 600, 124, 247 };
                float[] objj = new float[8];
                float[] res_mm = new float[8];
                float[] res_pp = new float[8];
                int []nkk = new int[8] ;
                Random r = new Random();
                    while (counter < 8)
                    {
    
                    var obj = nkk[counter] = r.Next(1, 8);     //ReadStruct<str_pereval>(reader);
                    var un = new test { pereval = obj, resm = res_mm[counter], resp = res_pp }; //, resm = res_mm[counter], resp = res_pp
                       if (counter < 4)
                            List.Add(un);
                        counter++;
                    }
                
           /**/
                for (int i = 0; i< 4; i++)
                {
                    
                    objj[i] = 1 - (tet[i] / res_val_m[i]) - (tet[i] / res_val_p[i]);
                    if (objj[i] > 0)
                    {
                        res_mm[i] = res_val_m[i] * objj[i];
                        res_pp[i] = res_val_p[i] * objj[i];
                       
                    }
                    else
                    { res_mm[i] = 0; res_pp[i] = 0; }
    
    
    List.Add(new test { resm = res_mm[i], resp = res_pp, result = objj });
                }
            }
        }
    }
    
    <Window x:Class="TestF.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:TestF"
            mc:Ignorable="d"
            x:Name="mainWindow"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="25"/>
                <RowDefinition Height="292*"/>
            </Grid.RowDefinitions>
            <Grid>
                <DataGrid x:Name="dataGrid1"  ItemsSource="{Binding List}"  DataContext ="{x:Reference mainWindow}" AutoGenerateColumns="False"
                                  HorizontalAlignment="Left" VerticalAlignment="Top" Height="276" Width="507" Margin="5,30,0,-281">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Test" Binding="{Binding resm}" />
                        <DataGridTextColumn Header="Test" Binding="{Binding pereval.nk}" />
                    </DataGrid.Columns>
                </DataGrid>
            </Grid>
            <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="432,3,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>
        </Grid>
    </Window>
    

    Вот тестовый код который раскрывает всю суть ошибки.Посмотрим на скрин 

     Мы видим что 1-й столбец сначала заполняется нулями, потом моими данными, из за этого в основной программе вылетают конвертеры и т.д. И еще один момент если убрать 2-й столбец тогда таблица не заполняется вообще. Как мне это победить ? 

    Скрин основной программы 

    Если вы спросите почему так сложно все ? Просто мне нужно произвести расчет неких данных, и затем отобразить их в Multibinding 

    <DataGridTextColumn Header="Вес Л‚ 0.7 мм (т)">
                                    <DataGridTextColumn.Binding>
                                        <MultiBinding Converter="{local:Myconverter}">
                                            <Binding Path="pereval.Pm"/>
                                            <Binding Path="resm"/>
                                        </MultiBinding>
                                    </DataGridTextColumn.Binding>
                                </DataGridTextColumn>

    Вообщем коллеги очень нуждаюсь в вашей помощи, и вашем совете, вашем примере и всем что сможет решить мою проблему. Большое всем спасибо 

    7 декабря 2015 г. 19:47
  • Тема все еще актуальна 
    9 декабря 2015 г. 16:34