Ich habe eine DataGrid
innerhalb einer UserControl
. Es sieht wie folgt aus:Wie binde ich ein String-Array automatisch an ein WPF DataGrid?
<UserControl x:Class="ExternalDataSourceComparison.ImportedInfoGrid"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Height="Auto" Width="Auto">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<DataGrid Name="_dataGrid" Grid.Row="0">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path[0].Length}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
ich die UserControl
in meinem MainWindow
haben, die wie folgt aussieht:
<Window x:Class="ExternalDataSourceComparison.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ExternalDataSourceComparison"
Title="MainWindow" Height="350" Width="525" WindowState="Maximized">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<local:ImportedInfoGrid x:Name="ExternalData" Grid.Row="0"/>
<StackPanel Height="36px" Orientation="Horizontal" Grid.Row="1">
<Button Name="_import" Content="Import Data" Margin="5" Padding="5, 2" Click="Import_Click"/>
<Button Name="_compare" Content="Compare" Margin="5" Padding="5, 2" Click="Compare_Click"/>
<Button Name="_cancel" Content="Cancel" Margin="5" Padding="5, 2" Click="Cancel_Click"/>
</StackPanel>
</Grid>
für das Fenster
In meinem Code hinter mit der Methode fs.CSVToStringArray
, Öffne ich eine CSV-Datei und analysiere den Inhalt zu einer string[][]
das äußere Array repräsentiert die Zeilen und die innere arr ay sind alle Spalten so string [0] [3] Zeile 1, Spalte 4.
In meinem Code wäre gesetzt hinter I nur ItemsSource
gleich den Array von Arrays, wie unten gezeigt:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
namespace ExternalDataSourceComparison
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
FileStuff fs = new FileStuff();
public MainWindow()
{
InitializeComponent();
}
private void Import_Click(object sender, RoutedEventArgs e)
{
string[][] array = fs.CSVToStringArray();
this.ExternalData._dataGrid.ItemsSource = array;
}
private void Cancel_Click(object sender, RoutedEventArgs e)
{
}
private void Compare_Click(object sender, RoutedEventArgs e)
{
}
}
}
Die Ausgabe ist jedoch nicht das, was ich erwartet habe. Ich denke, es zeigt die Attribute des Objekts anstelle des eigentlichen Inhalts. Gibt es eine Möglichkeit, Zeilen und Spalten automatisch zu generieren, oder muss ich den Code schreiben, um die Spalten zu erstellen und die Zeilen zu erstellen? Ich dachte mit einem DataGrid
könnte man etwas wie eine string[][]
oder eine List<string[]>
an die ItemsSource
binden und es würde nur Spalten generiert. Es erzeugt momentan automatisch Spalten, es füllt sie nur nicht mit dem Inhalt der string[][]
.