如何使用C#WPF将文本文件绑定到数据网格?我们的想法是在文本文件中有一行显示为datagrid中的一行。
答案 0 :(得分:4)
我认为您不能将文本直接绑定到数据网格
然而,您可以将objet绑定到数据网格
创建一个表示文本文件的对象。
-- content --
text1, param1, param2
text2, param1, param2
class OneLine{
string text {get;set;}
string param { get;set; }
...
}
然后,您可以使用BindingList将这些对象绑定到datagrid,BindingList主要是List。神奇之处在于对象的属性。 BindingList将尝试获取对象的每个属性并将其显示在网格中。
BindingList<OneLine> myList = new BindingList<OneLine>();
myList.Add(oneObject);
DataGrid myGrid = new DataGrid();
myGrid.DataSource = myList;
答案 1 :(得分: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;}
}
创建用作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;
}