2011-04-11 90 views

回答

4

我不认为你可以直接绑定文本到DataGrid

什么,但是你可以做的是一个客体绑定到DataGrid

创建代表文本文件的客体。

-- content -- 
text1, param1, param2 
text2, param1, param2 

class OneLine{ 
    string text {get;set;} 
    string param { get;set; } 
    ... 
} 

然后,您可以使用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;}   
    } 
    
  2. 创建IEnumerable的是,用作源的DataGrid

    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; 
    }