Есть задание, решить уравнение и вывести значения в 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;
}
}
Весь код
Не занимайтесь ерундой, не пишите интерфейс в коде.
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();
}
}
Продвижение своими сайтами как стратегия роста и независимости