0

これはクラスです:

public class TrainingData
{
    public string Training { get; set; }  
}

そして、これがMainWindowの残りのコードです。

Excel.Workbook xlWorkbook = xlApp.Workbooks.Open("D:/excel.xlsx");
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;
List <TrainingData> tData= new List <TrainingData>();

int rowCount = xlRange.Rows.Count;
int colCount = xlRange.Columns.Count;
//int k = 0; 

for (int i = 1; i <= rowCount; i++)
{
    tData.Add(new TrainingData() { Training = xlRange.Cells[i, 1].Value2.ToString() });
    //MessageBox.Show(tData[k].Training); 
    //k++;
}

Prikaz.ItemsSource = tData;

DataGrid:

<DataGrid AutoGenerateColumns="False" Height="120" HorizontalAlignment="Left" Margin="12,12,0,0" Name="Prikaz" VerticalAlignment="Top" Width="105" ItemsSource="{Binding}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Header" />
                </DataGrid.Columns>
            </DataGrid>`

つまり、Prikazは私のDataGridです。tDataは、TrainingDataオブジェクトのリストです。これらの3行のコメントを外すと、Excelファイルから情報を正しくインポートしたかどうかをテストできます。そうです。問題なく機能します。

では、なぜ空のDataGridを取得するのですか?行数は適切で、列は1つだけです。問題ありませんが、データは含まれていません。次の行を使用し Prikaz.ItemsSource = tData;て、オブジェクトリストとDataGridをバインドしました。トレーニングは公開されていると宣言されているため、DataGridに存在する必要があります。問題の原因は何ですか?

4

2 に答える 2

1

列パスをプロパティTrainingにバインドする必要があります。

構文はこのようなものですが、それはメモリからのものです。テキストはパストレーニングにバインドする必要があります

DataGridTextColumnバインディングを使用します:

<DataTemplate>
    <TextBlock Text="{Binding Path=Training}"/>
</DataTemplate>

また

<DataGridTextColumn Header="Header" Binding="{Binding Path=Training}/>
于 2012-06-16T15:18:16.907 に答える
1

コードでプロパティを指定しましたが、次のように、ItemsSourceオブジェクトに接続する際にそのプロパティを使用しItemsSourceて列へのバインディングを提供する必要もあります。DataGrid

<DataGrid.Columns>
    <DataGridTextColumn Header="Header" Binding="{Binding Path=Training}"/>
</DataGrid.Columns>

INotifyPropertyChangedさらに、クラスのインターフェイスを実装することもできます。TrainingDataまた、コレクションを使用する代わりに、コレクションオブジェクトList<TrainingData>を使用することをお勧めします。ObservableCollection<TrainingData>このMSDNの記事では、DataBinding概要と、カスタムクラスで上記のインターフェイスを使用する理由について説明します。

于 2012-06-16T15:39:19.783 に答える