[英]C# WPF DataGrid populating DataGrid problem
我正在嘗試在 WPF DataGrid 中制作一個 7 天滾動平均體重計算器。 所以基本上你一周的體重總和除以 7 = 你 7 天的平均體重。 因此,用戶將他們的權重放在名為gridListValues
的ObservableCollectionsList
中,然后將其添加到DataGrid
中。 7 天后,他們在 DataGrid 的另一列中獲得 7 天的平均重量。
問題是,當我在 DataGrid 中輸入權重七次時,我得到了這個結果: ((6 * weight) / 7)
。 但實際結果應該是((7 * weight) / 7)
。 我認為這是因為我在實例化 object 並將其添加到列表的同時調用了計算方法? 不太確定我應該如何解決這個問題。 這是代碼:
private void AddWeightToGridButton_Click(object sender, RoutedEventArgs e)
{
WeightGridValues averageWeight = new WeightGridValues();
if (gridListValues.Count <= 5)
gridListValues.Add(new WeightGridValues { Weight = AddWeightToGrid.Text, Date = Convert.ToString(AddDateToGrid) });
else if (gridListValues.Count >= 6)
{
gridListValues.Add(new WeightGridValues { Weight = AddWeightToGrid.Text, Date = Convert.ToString(AddDateToGrid), SevenDayWeightAverage = SevenDayAverageCalc(averageWeight) });
}
}
private string SevenDayAverageCalc(WeightGridValues averageWeight)
{
decimal sevenDayCalc = 0;
for (int i = 0; i < gridListValues.Count; i++)
{
sevenDayCalc += Convert.ToDecimal(gridListValues[i].Weight);
Convert.ToDecimal(gridListValues[i].SevenDayWeightAverage);
}
sevenDayCalc = sevenDayCalc / 7;
return averageWeight.SevenDayWeightAverage = Convert.ToString(sevenDayCalc);
}
public class WeightGridValues
{
public string Weight { get; set; }
public string Date { get; set; }
public string SevenDayWeightAverage { get; set; }
}
XAML:
<DataGrid x:Name="WeightDataGrid" Margin="440,194,10,10" AutoGenerateColumns="False" Grid.RowSpan="2" Grid.ColumnSpan="2">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="False" Header=" Date " Binding="{Binding Date, Mode=OneWay}" Width="100"/>
<DataGridTextColumn Header=" Weight " Binding="{Binding Weight}" Width="80"/>
<DataGridTextColumn Header=" 7-Day average " Binding="{Binding SevenDayWeightAverage}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
您可以將空的WeightGridValues
添加到gridListValues
,然后設置其各個元素。
gridListValues.Add(new WeightGridValues());
gridListValues[gridListValues.Count-1].Weight = AddWeightToGrid.Text;
gridListValues[gridListValues.Count-1].Date= Convert.ToString(AddDateToGrid);
gridListValues[gridListValues.Count-1].SevenDayWeightAverage = SevenDayAverageCalc(averageWeight)
作為方法SevenDayAverageCalc
的參數,有一種方法可以一起接收和處理新輸入的重量。
private void AddWeightToGridButton_Click(object sender, RoutedEventArgs e)
{
WeightGridValues averageWeight = new WeightGridValues();
if (gridListValues.Count <= 5)
{
gridListValues.Add(new WeightGridValues {
Weight = AddWeightToGrid.Text,
Date = Convert.ToString(AddDateToGrid) });
}
else if (gridListValues.Count >= 6)
{
gridListValues.Add(new WeightGridValues {
Weight = AddWeightToGrid.Text,
Date = Convert.ToString(AddDateToGrid),
SevenDayWeightAverage = SevenDayAverageCalc(averageWeight, AddWeightToGrid.Text) });
}
}
在SevenDayAverageCalc
方法中最好使用while
語句而不是for
語句,因為必須為添加的每個新行計算“7 天平均值” 。
private string SevenDayAverageCalc(WeightGridValues averageWeight, string newWeight)
{
decimal sevenDayCalc = 0;
int cnt = 1;
int currentRow;
while (cnt <= 6)
{
currentRow = gridListValues.Count - cnt;
sevenDayCalc += Convert.ToDecimal(gridListValues[currentRow].Weight);
Convert.ToDecimal(gridListValues[currentRow].SevenDayWeightAverage);
cnt++;
}
sevenDayCalc = (sevenDayCalc + Convert.ToDecimal(newWeight)) / 7;
return averageWeight.SevenDayWeightAverage = Convert.ToString(sevenDayCalc);
}
可以先在while
語句中將已有的六行數據相加,再加newWeight
除以7。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.