Спрашивающий
Кривое отображение коллекции в DataGrid ?

Общие обсуждения
-
Всем доброго времени суток, есть у меня коллекция в которой храниться массив данных, вот только он отображаеться не так как мне нужно, как исправить данную ошибку, есть такой код:
<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 значение из массива который мы выводим индексом, а остальные забиваются нулями. Хочется чтобы вместо нулей были мои данные по порядку, большое спасибо за ответ- Изменено Ethernets 1 декабря 2015 г. 11:32
- Изменен тип Maksim MarinovMicrosoft contingent staff, Moderator 4 января 2016 г. 11:18 тема неактивна
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