首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# WPF DataGrid填充DataGrid问题

C# WPF DataGrid填充DataGrid问题
EN

Stack Overflow用户
提问于 2021-05-16 04:10:28
回答 2查看 41关注 0票数 0

我正试着用WPF DataGrid做一个7天滚动平均权重计算器。所以基本上,你一周的体重总和除以7=你7天的平均体重。因此,用户将权重放入名为gridListValuesObservableCollectionsList中,然后将其添加到DataGrid中。7天后,他们在DataGrid的另一个专栏中获得了7天的averageWeight。

问题是,当我在DataGrid中输入权重七次时,我得到的结果是:((6 * weight) / 7)。但实际结果应该是((7 * weight) / 7)。我想这是因为我调用了在实例化对象并将其添加到列表的同时执行计算的方法?不过,我不太确定该如何解决这个问题。代码如下:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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>

EN

回答 2

Stack Overflow用户

发布于 2021-05-17 19:18:12

您可以向gridListValues添加一个空的WeightGridValues,然后设置它的各个元素。

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2021-05-17 20:03:27

作为SevenDayAverageCalc方法的参数,有一种方法可以一起接收和处理新输入的权重。

代码语言:javascript
复制
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天平均值’

代码语言:javascript
复制
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语句中将现有的6行数据相加,然后添加newWeight并将其除以7。

结果

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67550827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档