You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF C# CSV人员管理系统:PersonID重置与表头重复问题求助

解决WPF C# CSV人员管理系统的两个问题

问题1:重启程序后PersonID从1重新递增

当前personID是页面类的局部字段,程序重启后会被重置为0,导致每次重启新增人员时ID从1开始。解决思路是读取已有CSV文件中的最大PersonID,以此作为初始值。

问题2:每次添加人员重复写入表头

因为每次调用csvContext.Write时都设置了FirstLineHasColumnNames = true,导致每次追加数据都会写入表头。解决思路是判断文件是否存在,仅在文件不存在时写入表头。

修改后的AddPerson.xaml.cs代码

namespace WPFApp
{
    /// <summary>
    /// Interaction logic for AddPerson.xaml
    /// </summary>
    public partial class AddPerson : Page
    {
        int personID = 0;

        public AddPerson()
        {
            InitializeComponent();
            // 从CSV文件读取最大PersonID作为初始值
            personID = GetMaxPersonId();
        }
        
        private int GetMaxPersonId()
        {
            if (!File.Exists("PersonFIles.csv"))
                return 0;
            
            var csvContext = new CsvContext();
            var csvFileDescription = new CsvFileDescription
            {
                FirstLineHasColumnNames = true,
                SeparatorChar = ','
            };
            
            try
            {
                var persons = csvContext.Read<Person>("PersonFIles.csv", csvFileDescription).ToList();
                if (persons.Count == 0)
                    return 0;
                
                // 获取最大ID,处理空值情况
                return persons.Max(p => string.IsNullOrEmpty(p.personID) ? 0 : int.Parse(p.personID));
            }
            catch
            {
                // 读取失败或格式异常时返回0
                return 0;
            }
        }
        
        private void AddButton_Click(object sender, RoutedEventArgs e)
        {
            personID++;
            var personList = new List<Person>()
            {
                new Person{ personID = personID.ToString(), LastName = LastNameBox.Text, FirstName = FirstNameBox.Text, MiddleName = MiddleNameBox.Text}
            };
            
            bool fileExists = File.Exists("PersonFIles.csv");
            var csvFileDescription = new CsvFileDescription
            {
                // 仅当文件不存在时写入表头
                FirstLineHasColumnNames = !fileExists,
                SeparatorChar = ','
            };
            
            var csvContext = new CsvContext();
            using (TextWriter writer = new StreamWriter("PersonFIles.csv", true))
            {
                csvContext.Write(personList, writer, csvFileDescription);
            }
            
            MessageBox.Show($"人员添加成功!Person ID: {personID}");
            LastNameBox.Clear();
            FirstNameBox.Clear();
            MiddleNameBox.Clear();
        }
    }
}

说明

  1. ID递增逻辑:在页面构造函数中调用GetMaxPersonId方法,读取CSV中已有的最大ID,确保重启程序后从该值继续递增。如果文件不存在或读取失败,默认从0开始。
  2. 表头控制:通过File.Exists判断文件是否存在,仅在文件首次创建时写入表头,后续追加数据时不再重复写入。

内容的提问来源于stack exchange,提问作者Vance Gaspar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:13:28