如何:使用文本文件(C#,WPF)中的信息填充DataGrid.DataContext

时间:2014-05-20 08:39:35

标签: c# wpf xaml binding datagrid

如何:使用来自txt文件(C#,WPF)的信息填充DataGrid.DataContext

我正在尝试用我从某些txt文件中获取的信息填充DataGrid。有一个名为“CONTACTS”的文件夹,里面有一些(5)文件。这些文件以这种方式配置:

John Doe.txt的内容(没有列表符号):

  • John Doe Corp。
  • 先生。
  • Doe的
  • 约翰

XAML:

<DataGrid AutoGenerateColumns="False" CanUserResizeRows="False" DockPanel.Dock="Bottom" ItemsSource="{Binding CollectionofDetails}" Name="dataGrid_Content">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding CorporationName}" Header="Firma" />
                    <DataGridTextColumn Binding="{Binding Prefix}" Header="Anrede" />
                    <DataGridTextColumn Binding="{Binding FirstName}" Header="Nachname" />
                    <DataGridTextColumn Binding="{Binding LastName}" Header="Vorname" />
                </DataGrid.Columns>
            </DataGrid>

C#:

public class Details
    {
        public string CorporationName { get; set; }
        public string Prefix { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

    public ObservableCollection<Details> _CollectionofDetails = new ObservableCollection<Details>();

    public ObservableCollection<Details> CollectionofDetails
    {
        get { return _CollectionofDetails; }
        set { _CollectionofDetails = value; }
    }

    public void SetItemsToDataContext()
    {
        foreach (string Datei in Directory.GetFiles(@"C:\Users\schwarz\Desktop\Cusposes_2014-05-20_0827\ISAPO\ISAPO Cusposes\Business Contacts\Contacts", "*.txt"))
        {
            StreamReader reader = new StreamReader(Datei);

            int i = 0;
            string line = reader.ReadToEnd().Replace("\n", "");
            string[] t = line.Split('\r');
            Details d = new Details();
            d.CorporationName = t[i];
            d.Prefix = t[i + 1];
            d.FirstName = t[i + 2];
            d.LastName = t[i + 3];

            CollectionofDetails.Add(d);
            reader.Close();
        }
    }

不幸的是,我确实遇到了以下问题:

  1. 我不知道如何加载每个文件的内容(适用于所有文件)。
  2. 我不知道如何使用此信息填充DataGrid
  3. - &GT; Dhaval Patel的解决方案(见下文)。

3 个答案:

答案 0 :(得分:1)

您可以使用下面提到的代码

您的Xaml代码看起来像

 <DataGrid AutoGenerateColumns="False" CanUserResizeRows="False" DockPanel.Dock="Bottom" ItemsSource="{Binding CollectionofDetails}" Name="dataGrid_Content">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding CorporationName}" Header="Firma" />
            <DataGridTextColumn Binding="{Binding Prefix}" Header="Anrede" />
            <DataGridTextColumn Binding="{Binding FirstName}" Header="Nachname" />
            <DataGridTextColumn Binding="{Binding LastName}" Header="Vorname" />
        </DataGrid.Columns>
    </DataGrid>


 <Button Command="{Binding MyCommand}" Width="100" Margin="346,230,346,-189">RunMyCommand</Button>

您的ViewModel代码如

 private ObservableCollection<Details> _CollectionofDetails=new ObservableCollection<Details>();

    public ObservableCollection<Details> CollectionofDetails
    {
        get { return _CollectionofDetails; }
        set { _CollectionofDetails = value; RaisePropertyChanged("CollectionofDetails"); }
    }
 private RelayCommand _MyCommand;

    public RelayCommand MyCommand
    {
        get { return _MyCommand??(_MyCommand=new RelayCommand(Methodcall)); }
        set { _MyCommand = value; }
    }
  void Methodcall()
    {

        foreach (string Datei in Directory.GetFiles(@"C:\textfile", "*.txt"))
        {
            StreamReader reader = new StreamReader(Datei);


            int i=0;
            string line = reader.ReadToEnd().Replace("\n","");
            string[] t = line.Split('\r');
            Details d = new Details();
            d.CorporationName = t[i];
            d.Prefix = t[i + 1];
            d.FirstName = t[i + 2];
            d.LastName = t[i + 3];

            CollectionofDetails.Add(d);
            reader.Close();



        }
    }

public class Details
{
    public string CorporationName { get; set; }
    public string Prefix { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

输出应该看起来像

enter image description here

答案 1 :(得分:0)

这是一个你必须分解成的问题。我建议你定义一个适合你数据的类,比如

public class Person {

    public string FullName {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public string Title {get; set;}

}

在您的viewmodel类中,您有PersonList类型的变量List<Person>

然后你必须写一个方法,比如

private void PopulatePersonData(){

    // Here you put all the logic reading the .txt files creating a person for each file
    // and adding the person to the PersonList.

}

然后在viewmodel的构造函数中调用它。

最后,您将ItemsSource的{​​{1}}绑定到DataGrid。应该这样做。

答案 2 :(得分:0)

也许你应该真正阅读你的txt文件中的内容 通过使用例如Reader:

private void SetItemsToDataContext()
{
    foreach (String Datei in Directory.GetFiles(@"C:\Contacts", "*.txt"))
    {
        String[] linesRead = File.ReadAllLines(Datei);
        if (linesRead.Length != 4)
        {
            continue;
        }
        Contact contactRead = new Contact();
        contactRead.Company = linesRead[0];
        contactRead.Gender = linesRead[1];
        contactRead.Name = linesRead[2];
        contactRead.FirstName = linesRead[3];
        dataGrid_Content.Items.Add(contactRead);
    }
}

public class Contact
{
    public String Company { get; set; }
    public String Gender { get; set; }
    public String Name { get; set; }
    public String FirstName { get; set; }
}