c# WPF将文本文件绑定到datagrid

本文关键字:绑定 datagrid 文件 文本 WPF | 更新日期: 2023-09-27 17:49:39

如何使用c# WPF将文本文件绑定到数据网格?这个想法是在文本文件中有一行显示为datagrid中的一行。

c# WPF将文本文件绑定到datagrid

我不认为你可以直接绑定文本到数据网格

你可以做的是绑定一个对象到一个数据网格

创建一个对象来表示你的文本文件。

-- content --  
text1, param1, param2  
text2, param1, param2  
class OneLine{
  string text {get;set;}  
  string param { get;set; }
  ...
}
然后,您可以使用BindingList将这些对象绑定到数据网格,BindingList主要是一个List。魔力在于对象的属性。BindingList将尝试获取对象的每个属性并在网格中显示它们。
BindingList<OneLine> myList = new BindingList<OneLine>();
myList.Add(oneObject);
DataGrid myGrid = new DataGrid();
myGrid.DataSource = myList;

在我的项目中,我使用以下方法

  1. 创建在文本文件中表示行的类,例如

    public class cls_syslog_record
    {
        public DateTime? f1 {get;set;}
        public string f2 {get;set;}                
        public string f3 {get;set;}
        public string f4 {get;set;}        
    }
    
  2. 创建作为DataGrid源的IEnumerable

    public IEnumerable<cls_syslog_record> get_line_seq_text()
    {
        cls_mvs_syslog_parser parser = new cls_mvs_syslog_parser();
        foreach (string record_line in File.ReadLines(this.filename))
        {
            cls_syslog_record text_record = parser.parse_syslog_text(record_line);
            if (text_record == null)
            {
                 continue;
            }
            yield return text_record;
         }
    }
    
  3. 设置我的IEnumerable对象作为源

    static private DataGrid make_text_viewer(string p_filename)
    {
        logger.Debug("start");
        DataGrid table_viewer;
        cls_file_line_seq fl_seq = new cls_file_line_seq(p_filename);
        table_viewer = new DataGrid();
        table_viewer.CanUserAddRows = false;
        table_viewer.CanUserDeleteRows = false;
        table_viewer.Columns.Add(create_column("Date Time", "timestamp"));
        table_viewer.Columns.Add(create_column("LPAR Name", "lpar_name"));
        table_viewer.Columns.Add(create_column("JOB ID", "job_id"));
        table_viewer.Columns.Add(create_column("Message", "message"));
        table_viewer.HeadersVisibility = DataGridHeadersVisibility.All;
        table_viewer.ItemsSource = fl_seq.get_line_seq_text();
        return table_viewer;
    }
    
  4. 然后设置绑定

    static private DataGridColumn create_column(string header, string p_property_name)
    {
        DataGridTextColumn column = new DataGridTextColumn();
        column.Header = header;
        column.Binding = new Binding(p_property_name);            
        return column;
    }