none
Работа с DataGrid WPF RRS feed

  • Вопрос

  • Добрый день!

    Прошу Вашей помощи!

    Как осуществить следующий алгоритм?

    Нужно создать DataGrid с фиксированным количеством столбцов. После чего при нажатии кнопки на форме возникает определенное (введенное в TextBox) количество строк.

    Далее пользователь вводит данные в полученную таблицу. И наконец мы проводим математический расчет с полученными данными из таблицы.

    11 июля 2013 г. 17:59

Ответы

  • Разобрался!

    Для тех, у кого возникли такие же сложности...

    <DataGrid ItemsSource="{Binding}" CanUserAddRows="False" AutoGenerateColumns="false" Name="InputDataTable" HorizontalAlignment="Stretch" Margin="10,10,10,10" Grid.Row="1" VerticalAlignment="Stretch" CellEditEnding="InputData_CellEditEnding">            
                <DataGrid.Columns>
                    <DataGridTextColumn Header="№ Поверхности" Width="1*" Binding="{Binding Path=number}"/>
                    <DataGridTextColumn Header="Радиус" Width="0.8*" Binding="{Binding Path=radius}"/>
                    <DataGridTextColumn Header="Коэффициент преломления" Width="1.8*" Binding="{Binding Path=reflection}"/>
                    <DataGridTextColumn Header="Расстояние" Width="*" Binding="{Binding Path=length}"/>
                </DataGrid.Columns>
            </DataGrid>


    Это часть кода в xaml, описывающая DataGrid, как видно привязка осуществляется следующим способом: 

    Binding="{Binding Path=number}"

    Это часть кода в .cs файле:

    //глобальные переменные
            int SurfCount;
            List<InputData> Data = new List<InputData>();
            //класс вводимых данных
            public class InputData
            {
                public int number { get; set; }
                public double radius { get; set; }
                public double reflection { get; set; }
                public double length { get; set; }
            }        
            private void Add_Click(object sender, RoutedEventArgs e)
            {
                SurfCount = Convert.ToInt16(AddTextBox.Text);
                for (int i = 0; i < SurfCount; i++)
                {
                    InputData temp = new InputData();
                    temp.number = i + 1;                
                    Data.Add(temp);
                }
                InputDataTable.ItemsSource = Data;
            }

    Здесь за входные данные отвечает класс InpuData, именно на его свойства я осуществлял привязку DataGrid.

    Так же при редактировании ячейки DataGrid, данные в классе InputData менялись автоматически.

    12 июля 2013 г. 8:41

Все ответы

  • Здравствуйте Александр,

    Не хочу Вас огорчить, но целью форума не является предоставление готовых решений, алгоритмов, програм. Единственный шанс, если такое уже кто-то делал сам и у него есть готовый вариант. Лучше всего если Вы сами начнете писать и процесе чего, если Вам что-то не ясно или что-то не получается, можете задать свой вопрос на форум.


    Если вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение"

    12 июля 2013 г. 6:19
    Модератор
  • Разобрался!

    Для тех, у кого возникли такие же сложности...

    <DataGrid ItemsSource="{Binding}" CanUserAddRows="False" AutoGenerateColumns="false" Name="InputDataTable" HorizontalAlignment="Stretch" Margin="10,10,10,10" Grid.Row="1" VerticalAlignment="Stretch" CellEditEnding="InputData_CellEditEnding">            
                <DataGrid.Columns>
                    <DataGridTextColumn Header="№ Поверхности" Width="1*" Binding="{Binding Path=number}"/>
                    <DataGridTextColumn Header="Радиус" Width="0.8*" Binding="{Binding Path=radius}"/>
                    <DataGridTextColumn Header="Коэффициент преломления" Width="1.8*" Binding="{Binding Path=reflection}"/>
                    <DataGridTextColumn Header="Расстояние" Width="*" Binding="{Binding Path=length}"/>
                </DataGrid.Columns>
            </DataGrid>


    Это часть кода в xaml, описывающая DataGrid, как видно привязка осуществляется следующим способом: 

    Binding="{Binding Path=number}"

    Это часть кода в .cs файле:

    //глобальные переменные
            int SurfCount;
            List<InputData> Data = new List<InputData>();
            //класс вводимых данных
            public class InputData
            {
                public int number { get; set; }
                public double radius { get; set; }
                public double reflection { get; set; }
                public double length { get; set; }
            }        
            private void Add_Click(object sender, RoutedEventArgs e)
            {
                SurfCount = Convert.ToInt16(AddTextBox.Text);
                for (int i = 0; i < SurfCount; i++)
                {
                    InputData temp = new InputData();
                    temp.number = i + 1;                
                    Data.Add(temp);
                }
                InputDataTable.ItemsSource = Data;
            }

    Здесь за входные данные отвечает класс InpuData, именно на его свойства я осуществлял привязку DataGrid.

    Так же при редактировании ячейки DataGrid, данные в классе InputData менялись автоматически.

    12 июля 2013 г. 8:41
  • Спасибо за ответ Александр :)


    Если вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение"

    12 июля 2013 г. 8:57
    Модератор