我创建了一个简单的 WPF 应用程序,我想从 Excel 工作表导入数据,执行一些自定义操作并导出到在线日历。为了掌握导出到在线议程的项目数量,我想创建一个数据网格,我可以在其中过滤和选择我想要导出的项目。
我的wpf网格如下:
<DataGrid Name="dataGridAgendaItems" AutoGenerateColumns="False" ItemsSource="{Binding}" Margin="0,0,0,61" >
<DataGrid.Columns>
<DataGridTextColumn Header="X" Width="0.3*" Binding="{Binding Path=IsSelected}" />
<DataGridTextColumn Header="Datum" Width="1*" Binding="{Binding Path=Date}" />
<DataGridTextColumn Header="Tijd" Width="1*" Binding="{Binding Path=Time}" />
<DataGridTextColumn Header="Locatie" Width="1*" Binding="{Binding Path=Location}" />
<DataGridTextColumn Header="Title" Width="2*" Binding="{Binding Path=Title}" />
<DataGridTextColumn Header="Omschrijving" Width="3*" Binding="{Binding Path=Description}" />
</DataGrid.Columns>
</DataGrid>
背后的代码(出于审查和帮助目的而被删除:
namespace ExcelToCalendar
{
public partial class MainWindow : Window
{
public ICollection<Excel.AgendaRow> AgendaItems;
...
private void BtnConfirmColumns_Click(object sender, RoutedEventArgs e)
{
...
AgendaItems = new List<Excel.AgendaRow>();
foreach(var row in Rows)
{
...
Excel.AgendaRow tmpAgendaItem = new()
{
Date = row.Columns[dateColumn].ToString(),
Title = row.Columns[titleColumn].ToString()
};
...
AgendaItems.Add(tmpAgendaItem);
}
dataGridAgendaItems.ItemsSource = AgendaItems;
}
}
}
和Excel课程
public class Excel
{
...
public class AgendaRow
{
public int Id;
public required string Date;
public string? Time;
public string? Location;
public string? Description;
public required string Title;
public bool IsSelected;
}
}
当我运行应用程序时,数据网格显示正确的行数,但所有列都是空的。出了什么问题?现在尝试了很多东西但没有得到任何结果,请帮忙。
看来问题可能与您定义 AgendaRow 类的方式有关。在 WPF 中,当您将数据绑定到 DataGrid 时,它依赖于属性,而不是字段。以下是修改 AgendaRow 类以使用属性的方法:
public class Excel
{
// ...
public class AgendaRow
{
public int Id { get; set; }
public string Date { get; set; }
public string Time { get; set; }
public string Location { get; set; }
public string Description { get; set; }
public string Title { get; set; }
public bool IsSelected { get; set; }
}
}