我搜索了很多主题,无法找到使用WPF DataGrid
列出目录中文件名内容的答案。我可以在ListBox
中输出内容,但不知道如何将项目添加到Column
中的DataGrid
。
适用于ListBox
string path = "C:";
object[] AllFiles = new DirectoryInfo(path).GetFiles().ToArray();
foreach (object o in AllFiles)
{
listbox.Items.Add(o.ToString());
}
如何使用DataGrid
执行相同的操作?或者从strings
到array
DataGrid
的至少地点Column
?
答案 0 :(得分:5)
您可以使用一列创建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();
通过将ItemsSource
设置为FileInfo[]
,您可以选择创建绑定到FileInfo
类的其他属性的其他列。此DataGrid
适用于分配给IEnumerable
的任何ItemsSource
。如果它不是string
,则会调用ToString()
答案 1 :(得分:2)
首先必须在DataGrid中添加Columns(使用VS对设计师来说非常简单)然后你可以使用类似的东西:
for (int i = 0; i < Object.Length; i++)
dataGrid.Rows[i].Cells[0].Value = Object[i];
在这种情况下,我正在使用Cells [0],但您可以指定行上的任何单元格来放置值。
答案 2 :(得分: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>
答案 3 :(得分:1)
而不是:
object[] AllFiles = new DirectoryInfo(path).GetFiles().ToArray();
使用
List<string> AllFiles = new DirectoryInfo(path).GetFiles().ToList();
MyDataGrid.ItemSource = Allfiles;
这会自动将文件绑定到DataGrid。
答案 4 :(得分:-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;