簡體   English   中英

C# WPF DataGrid填充DataGrid問題

[英]C# WPF DataGrid populating DataGrid problem

我正在嘗試在 WPF DataGrid 中制作一個 7 天滾動平均體重計算器。 所以基本上你一周的體重總和除以 7 = 你 7 天的平均體重。 因此,用戶將他們的權重放在名為gridListValuesObservableCollectionsList中,然后將其添加到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM