c# WPF将文本文件绑定到datagrid
本文关键字:绑定 datagrid 文件 文本 WPF | 更新日期: 2023-09-27 17:49:39
如何使用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;
在我的项目中,我使用以下方法
-
创建在文本文件中表示行的类,例如
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;} }
-
创建作为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; } }
-
设置我的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; }
-
然后设置绑定
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; }