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 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 对象的列表。如果我取消注释这三行,我可以测试我是否从 excel 文件中正确导入了信息,是的,它工作得很好。

那么为什么我得到空的DataGrid?它有正确的行数和一列,没关系,但里面没有数据。我使用了这一行: Prikaz.ItemsSource = tData;绑定我的对象列表和 DataGrid。训练被宣布为公开的,因此它应该出现在 DataGrid 中。什么可能导致问题?

4

2 回答 2

1

您需要将列路径绑定到属性 Training。

语法是这样的,但这只是来自记忆。文本需要绑定到路径Training

使用DataGridTextColumn 绑定

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

或者

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

尽管您已ItemsSource在代码中指定了该属性,但您还需要在DataGrid连接到 ItemsSource 对象及其属性时提供与列的绑定,如下所示:

<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 回答