首页 > 解决方案 > 无法将结果加载到 data.grid

问题描述

我有利息计算器,计算后我想将数据(开始日期、结束日期、原则、日费率、总费率和总额)发送到数据网格。

<DataGrid x:Name="table_interestResultsTable" Height="700" HorizontalAlignment="Left" Margin="12,21,0,0" VerticalAlignment="Top" Width="1000" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Start date" Binding="{Binding interest_SDATE}"/>
                <DataGridTextColumn Header="End date" Binding="{Binding interest_EDATE}"/>
                <DataGridTextColumn Header="Principle" Binding="{Binding interest_PRINCIPLE}"/>
                <DataGridTextColumn Header="ANNUAL RATE" Binding="{Binding interest_ANNUALRATE}"/>
                <DataGridTextColumn Header="Daily interest" Binding="{Binding interest_DAILYINTEREST}"/>
                <DataGridTextColumn Header="Total interest" Binding="{Binding interest_TOTALINTEREST}"/>
                <DataGridTextColumn Header="Total" Binding="{Binding interest_TOTAL}"/>
               
            </DataGrid.Columns>
           
        </DataGrid>

我有代码,一开始在哪里

public Interest()
    {
        //test at the beginning, is table working
        InitializeComponent();
        List<User> users = new List<User>();
        users.Add(new User() { Id = 1, interest_SDATE = "John Doe", interest_EDATE = new DateTime(1971, 7, 23) });
        users.Add(new User() { Id = 2, interest_SDATE = "Jane Doe", interest_EDATE = new DateTime(1974, 1, 17) });
        users.Add(new User() { Id = 3, interest_SDATE = "Sammy Doe", interest_EDATE = new DateTime(1991, 9, 2) });
        table_interestResultsTable.ItemsSource = users;
    }

我正在测试,桌子,它工作正常。然后我有计算,我有错误

 private void buttonReportsInterestCalculate_Click(object sender, RoutedEventArgs e)
    {
        
        
        //Checking, are the days set
        if (nameReportsInterestDatePickerFrom.SelectedDate == null)
        {
            MessageBox.Show("Please select start date");
            return;
        }
        if (nameReportsInterestDatePickerTo.SelectedDate == null)
        {
            MessageBox.Show("Please select end date");
            return;
        }

       if(nameReportsInterestPrinciple == null || nameReportsInterestPrinciple.Text == "")
        {
            MessageBox.Show("Please enter the value of principle");
            return;
        }
        if (nameReportsInterestAnnualRate == null || nameReportsInterestAnnualRate.Text == "")
        {
            MessageBox.Show("Please enter the yearly rate");
            return;
        }

        
          DateTime start_date = DateTime.Parse(nameReportsInterestDatePickerFrom.Text);
        DateTime end_date = DateTime.Parse(nameReportsInterestDatePickerTo.Text);
        string annualRate_string = nameReportsInterestAnnualRate.Text;
        if(annualRate_string.Contains("%"))
        {
            annualRate_string=annualRate_string.Replace("%", "");
        }
        decimal annualRate_decimal = decimal.Parse(annualRate_string);
        if (annualRate_decimal >= 0.5m)
        {
            annualRate_decimal /= 100m;
        }
        decimal principle = decimal.Parse(nameReportsInterestPrinciple.Text, NumberStyles.Any);
        //Testing
        nameReportsInterestDatePickerFrom.Text = start_date.ToShortDateString();
        nameReportsInterestDatePickerTo.Text = end_date.ToShortDateString();
        nameReportsInterestAnnualRate.Text = annualRate_decimal.ToString("P");
        nameReportsInterestPrinciple.Text = principle.ToString("C");
        //Calculate days between start date and end date
        TimeSpan elapsed = end_date - start_date;
        int days = (int)elapsed.TotalDays;
        decimal dailyRate = annualRate_decimal / 365;
        dailyRate = Decimal.Round(dailyRate,10);
        decimal totalRate = days * dailyRate * principle;
        totalRate = Decimal.Round(totalRate,2);
        decimal total = totalRate + principle;
        nameReportsInterestDailyRate.Text = dailyRate.ToString();
        nameReportsInterestTotalRate.Text = totalRate.ToString();
        nameReportsInterestTotal.Text = total.ToString();

        
        List<User> users = new List<User>();
        users.Add(new User() { Id = 4, interest_SDATE = start_date.ToShortDateString(), interest_EDATE = end_date.ToShortDateString() });
        table_interestResultsTable.ItemsSource = users;

    }

    private void nameReportsInterestPrinciple_TextChanged(object sender, TextChangedEventArgs e)
    {
        string s = Regex.Replace(((TextBox)sender).Text, @"[^\d,]", "");
        ((TextBox)sender).Text = s;
    }

    private void nameReportsInterestAnnualRate_TextChanged(object sender, TextChangedEventArgs e)
    {
        string s = Regex.Replace(((TextBox)sender).Text, @"[^\d,]", "");
        ((TextBox)sender).Text = s;
    }
}

}

我有错误: users.Add(new User() { Id = 4, interest_SDATE = start_date.ToShortDateString(), interest_EDATE = end_date.ToShortDateString() }); 完全错误在:

interest_EDATE = end_date.ToShortDateString()

为什么我没有错误

interest_SDATE = start_date.ToShortDateString()

但是当我想在下一列中插入第二个日期时出现错误

interest_EDATE = end_date.ToShortDateString()

我无法将字符串转换为 system.datetime

标签: c#wpfdatagrid

解决方案


I have found a problem, i have changed public class user to:

public class User
    {
        public int Id { get; set; }

        public DateTime interest_SDATE { get; set; }

        public DateTime interest_EDATE { get; set; }

        public decimal interest_PRINCIPLE { get; set; }

        public decimal interest_ANNUALRATE { get; set; }

        public decimal interest_DAILYINTEREST { get; set; }

        public decimal interest_TOTALINTEREST { get; set; }

        public decimal interest_TOTAL { get; set; }

and then:

users.Add(new User() { Id = 4, interest_SDATE = start_date, interest_EDATE = end_date, interest_PRINCIPLE = principle, interest_ANNUALRATE = annualRate_decimal,
            interest_DAILYINTEREST = dailyRate, interest_TOTALINTEREST = totalRate, interest_TOTAL = total});

start working well. Thanks guys


推荐阅读