Помогите разобраться с заданием DataGrid

176
06 ноября 2019, 09:40

Есть задание, решить уравнение и вывести значения в DataGrid, сделать это у меня не получается, а точнее не понимаю как это сделать.

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    public class row
    {
        public int Id { get; set; }
        public double X { get; set; }
        public double Y { get; set; }
        public double S { get; set; }
        public double Eps { get; set; }
    };
    private void Grid()
    {
        DataGridTextColumn c1 = new DataGridTextColumn();
        c1.Header = "№";
        c1.Binding = new Binding("id");
        c1.Width = 50;
        dataGrid.Columns.Add(c1);
        DataGridTextColumn c2 = new DataGridTextColumn
        {
            Header = "x",
            Binding = new Binding("x"),
            Width = 100
        };
        dataGrid.Columns.Add(c2);
        DataGridTextColumn c3 = new DataGridTextColumn();
        c3.Header = "Y";
        c3.Binding = new Binding("Y");
        c3.Width = 100;
        dataGrid.Columns.Add(c3);
        DataGridTextColumn c4 = new DataGridTextColumn();
        c4.Header = "S";
        c4.Binding = new Binding("S");
        c4.Width = 100;
        dataGrid.Columns.Add(c4);
        DataGridTextColumn c5 = new DataGridTextColumn();
        c5.Header = "Y";
        c5.Binding = new Binding("Ys");
        c5.Width = 100;
        dataGrid.Columns.Add(c5);
        row newRow = new row();
        newRow.Id = 0;
        newRow.X = 1;
        newRow.Y = 1000;
        newRow.S = 1001;
        newRow.Eps = 1;
        List<row> list = new List<row>();
        list.Add(newRow);
        dataGrid.ItemsSource = list;
    }

    private void button_Click(object sender, RoutedEventArgs e)
    {
        double a = 0.1;
        double b = 1.0;
        double n = 140.0;
        double h = (b - a) / 10.0;
        double s = 0, y = 0;
        for (double x = a; x <= b; x += h)
        {
            s += 1 + 3 * Math.Pow(x, 2);
        }
        Grid();
    }
    List<row> list = new List<row>();
    private void clear_Click(object sender, RoutedEventArgs e)
    {
        dataGrid.ItemsSource = null;
        list.Clear();
        dataGrid.ItemsSource = list;
    }
}

Весь код

Answer 1

Не занимайтесь ерундой, не пишите интерфейс в коде.

XAML по-простому без стилей

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="3*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <DataGrid x:Name="_dataGrid"
              Grid.Row="0"
              AutoGenerateColumns="False"
              ItemsSource="{Binding Rows}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="№"
                                Width="100"
                                Binding="{Binding Id}"/>
            <DataGridTextColumn Header="X"
                                Width="100"
                                Binding="{Binding X}"/>
            <DataGridTextColumn Header="Y"
                                Width="100"
                                Binding="{Binding Y}"/>
            <DataGridTextColumn Header="S"
                                Width="100"
                                Binding="{Binding S}"/>
            <DataGridTextColumn Header="Eps"
                                Width="100"
                                Binding="{Binding Eps}"/>
        </DataGrid.Columns>
    </DataGrid>
    <StackPanel Grid.Row="1"
                Orientation="Horizontal"
                HorizontalAlignment="Center">
        <Button x:Name="_buttonOK"
            Content="OK"
            Width="100"
            Height="30"
            Margin="10"
            Click="ButtonOK_Click"/>
        <Button x:Name="_buttonClear"
            Content="Clear"
            Width="100"
            Height="30"
            Margin="10"
            Click="_buttonClear_Click"/>
    </StackPanel>
</Grid>

Кодбихайнд (добавьте using System.Collections.ObjectModel;)

public class Row
{
    public int Id { get; set; }
    public double X { get; set; }
    public double Y { get; set; }
    public double S { get; set; }
    public double Eps { get; set; }
};

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Rows = new ObservableCollection<Row>();
        this.DataContext = this;
    }
    public ObservableCollection<Row> Rows { get; set; }
    private void ButtonOK_Click(object sender, RoutedEventArgs e)
    {
        Row row = new Row
        {
            Id = 0,
            X = 1,
            Y = 1000,
            S = 1001,
            Eps = 1
        };
        Rows.Add(row);
    }
    private void _buttonClear_Click(object sender, RoutedEventArgs e)
    {
        Rows.Clear();
    }
}

P.S.

Ещё вопрос, у меня есть уравнение, его надо решить и записать, как это реализовать?

Ну, как-то так

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="4*"/>
        <RowDefinition Height="2*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <DataGrid x:Name="_dataGrid"
              Grid.Row="0"
              AutoGenerateColumns="False"
              ItemsSource="{Binding Rows}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="№"
                                Width="100"
                                Binding="{Binding Id}"/>
            <DataGridTextColumn Header="X"
                                Width="100"
                                Binding="{Binding X}"/>
            <DataGridTextColumn Header="Y"
                                Width="100"
                                Binding="{Binding Y}"/>
            <DataGridTextColumn Header="Eps"
                                Width="100"
                                Binding="{Binding Eps}"/>
            <DataGridTextColumn Header="S"
                                Width="100"
                                Binding="{Binding S}"/>
        </DataGrid.Columns>
    </DataGrid>
    <StackPanel Grid.Row="1"
                Margin="10"
                HorizontalAlignment="Center">
        <StackPanel Orientation="Horizontal"
                    Margin="5">
            <TextBlock Text="X: "/>
            <TextBox x:Name="_textBoxX"
                     Width="100"
                     Height="20"
                     Text="{Binding NewRow.X}"/>
        </StackPanel>
        <StackPanel Orientation="Horizontal"
                    Margin="5">
            <TextBlock Text="Y: "/>
            <TextBox x:Name="_textBoxY"
                     Width="100"
                     Height="20"
                     Text="{Binding NewRow.Y}"/>
        </StackPanel>
        <StackPanel Orientation="Horizontal"
                    Margin="5">
            <TextBlock Text="Eps: "/>
            <TextBox x:Name="_textBoxEps"
                     Width="100"
                     Height="20"
                     Text="{Binding NewRow.Eps}"/>
        </StackPanel>
    </StackPanel>
    <StackPanel Grid.Row="2"
                Orientation="Horizontal"
                HorizontalAlignment="Center">
        <Button x:Name="_buttonOK"
            Content="OK"
            Width="100"
            Height="30"
            Margin="10"
            Click="ButtonOK_Click"/>
        <Button x:Name="_buttonClear"
            Content="Clear"
            Width="100"
            Height="30"
            Margin="10"
            Click="_buttonClear_Click"/>
    </StackPanel>
</Grid>

И пару дополнений

public class Row
{
    public int Id { get; set; }
    public double X { get; set; }
    public double Y { get; set; }
    public double S { get; set; }
    public double Eps { get; set; }
    public void CalcFormulа()
    {
        //я не знаю какая у вас формула
        //потому так, от балды
        S = X * Y / Eps; 
    }
};

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public MainWindow()
    {
        InitializeComponent();
        Rows = new ObservableCollection<Row>();
        NewRow = new Row() { Id = 1 };
        //привязка к контексту данных
        this.DataContext = this;
    }
    public event PropertyChangedEventHandler PropertyChanged;
    public ObservableCollection<Row> Rows { get; set; }
    private Row _NewRow;
    public Row NewRow
    {
        get => _NewRow;
        set
        {
            _NewRow = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(NewRow)));
        }
    }

    private void ButtonOK_Click(object sender, RoutedEventArgs e)
    {
        //считаем...
        NewRow.CalcFormulа();
        //вычисляем  Id для след. строки
        int id = NewRow.Id + 1;
        //отображем в DataGrid
        Rows.Add(NewRow);
        //заготовка для след.строки
        NewRow = new Row() { Id = id };
    }
    private void _buttonClear_Click(object sender, RoutedEventArgs e)
    {
        Rows.Clear();
    }
}
READ ALSO
Вращение объекта вокруг его точки Uniity

Вращение объекта вокруг его точки Uniity

Сделал я в итоге вращение вокруг точки с помощью засовывания в пустой объектВ пустом объекте создал Box Collider и разместил его вот так:

147
C# PowerPoint создать фотоальбом

C# PowerPoint создать фотоальбом

Всем привет, кто нибудь знает как в powerpoint создать фото альбом программно на C# ???

173