2013-08-27 167 views
2

我已經搜索了很多主題,但無法找到使用WPF DataGrid列出目錄中的文件名內容的答案。我能夠輸出ListBox中的內容,但不知道如何將項目添加到DataGrid中的Column在DataGrid中列出目錄文件

這適用於一個ListBox

string path = "C:"; 

object[] AllFiles = new DirectoryInfo(path).GetFiles().ToArray(); 

foreach (object o in AllFiles) 
{ 
    listbox.Items.Add(o.ToString()); 
} 

我怎樣才能做一個DataGrid一樣嗎?或至少stringsarray變成DataGridColumn

回答

4

你可以用一個列上創建DataGrid

<DataGrid x:Name="myDataGrid" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn IsReadOnly="True" Binding="{Binding}" Header="Name"/> 
    </DataGrid.Columns> 
</DataGrid> 

,並在你的代碼是這樣填寫的:

myDataGrid.ItemsSource = new DirectoryInfo(path).GetFiles(); 

通過設置ItemsSourceFileInfo[]你哈ve選項創建綁定到FileInfo類的其他屬性的其他列。此DataGrid將與分配給ItemsSource的任何IEnumerable配合使用。如果它不會是一個string已經然後ToString()將被稱爲

+0

如何將第二列的數據與不同的來源綁定?如果我使用'Binding =「{Binding}」',則會顯示相同的信息。 – MCSharp

+0

你是什麼意思由不同的來源? 'FileInfo'的另一個屬性或另一個字符串列表? – dkozl

+0

與'FileInfo'不相關的不同數組。我用這個數組作爲'ItemSource'。 'myDataGrid.ItemsSource = AllFiles';這很好。我也能夠從不同的數組中調用其他值。如何從不同列中添加信息的不同陣列中的項目? – MCSharp

2

你首先要在你的DataGrid中添加列(使用VS是與設計師很簡單),然後你可以使用這樣的:我使用的細胞

for (int i = 0; i < Object.Length; i++) 
    dataGrid.Rows[i].Cells[0].Value = Object[i]; 

在這種情況下,[0]但是您可以指定行中的任何單元格以放置值。

+0

我有三個'DataGridTextColumns'。我不知道如何實現你的代碼。行,單元格或值不存在此類屬性。 – MCSharp

+0

@ user2722800,WPF中的'DataGrid',沒有'行'或'Cells' – dkozl

+0

我的不好,猜測我沒有發現那個細節。 – Guga

1

你應該能夠在您的列表框綁定到DataGrid類似:

<Window x:Class="Bind02.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Bind02" Height="300" Width="300" 
> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 
     <ListBox Name="listBox" ItemsSource="{Binding}"/> 
     <StackPanel Grid.Column="1"> 
      <Button Click="OnLoad">_Load</Button> 
      <Button Click="OnSave">_Save</Button> 
      <Button Click="OnAdd">_Add</Button> 
      <Button Click="OnEdit">_Edit</Button> 
      <Button Click="OnDelete">_Delete</Button> 
      <Button Click="OnExit">E_xit</Button> 
     </StackPanel> 
    </Grid> 
</Window> 
1

相反的:

object[] AllFiles = new DirectoryInfo(path).GetFiles().ToArray(); 

使用

List<string> AllFiles = new DirectoryInfo(path).GetFiles().ToList(); 
MyDataGrid.ItemSource = Allfiles; 

這會自動將文件綁定到DataGrid。

+0

我發佈之前已經嘗試過。這會導致一個錯誤:不能隱式地將類型'System.Collections.Generic.List '轉換爲'System.Collections.Generic.List ' – MCSharp

-1
string [] fileEntries = Directory.GetFiles(targetDirectory); 

List<FileInfo> fileList = new List<FileInfo>(); 

foreach (string file in fileEntries) 
{ 

fileList.Add(new FileInfo(file)); 
} 

datagrid.ItemsSource = fileList; 
+0

只有代碼中的答案在SO中被忽略。請爲他人閱讀您的代碼的好處添加一些解釋! –