c# - DataGrid 添加行但文本不可见
问题描述
我正在尝试将 DataTable 显示到具有两列的 DataGrid 上。
当我更新 DataTable 时,DataGrid 显示新行,但单元格为空。我已经为此查看了许多不同的可能解决方案,但仍然无法显示结果。
这是我的 DataGrid 的 xaml 代码:
<DataGrid x:Name="SubjectsList" Height="500" ScrollViewer.CanContentScroll="True" AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Subject" Width="2*"/>
<DataGridTextColumn Header="Weekly" Width="*"/>
</DataGrid.Columns>
</DataGrid>
以下是我用于更新表的 C# 代码:
public void AddSubject(object sender, RoutedEventArgs e)
{
Subject temp = new Subject(SubjectName.Text, Convert.ToInt32(PerWeek.Text));
subjects.Add(temp);
MessageBox.Show(temp.Name + " has been added");
for(int i = 0; i < subjectsTable.Rows.Count; i++)
{
subjectsTable.Rows.RemoveAt(i);
}
foreach (Subject subject in subjects)
{
DataRow dataRow = subjectsTable.NewRow();
dataRow[0] = subject.Name;
dataRow[1] = subject.ClassesPerWeek;
subjectsTable.Rows.Add(dataRow);
MessageBox.Show(subject.Name);
}
SubjectsList.ItemsSource = subjectsTable.DefaultView;
}
在上面的代码中,SubjectsList
是我的DataGrid,subjectsTable
也是我的DataTable。
我尝试了以下方法:
- 使用
DataGrid.DataContext
代替DataGrid.ItemSource
ItemSource = "{Binding Path=subjectsTable}"
在我的 xaml 代码中添加- 尝试使用将行添加为项目
DataGrid.Items.Add(dataRow)
- 为我的用户定义类的每个数据成员添加了一个
getter
andsetter
方法Subject
- 我所有的变量、数据成员和数据结构都是公开的。
如果有人知道如何使数据可见,请帮助我。谢谢你。
这是我添加两个主题后发生的情况:
解决方案
您需要为 DataGrid 中的每一列指定绑定。
绑定路径将是 DataTable 中列的名称。
假设您的 DataTable 列是这样定义的(您没有显示这个,所以我只需要举一个例子):
subjectsTable.Columns.Add("NameColumn", typeof(string));
subjectsTable.Columns.Add("ClassesColumn", typeof(int));
XAML 中的 DataGrid 列定义应如下所示:
<DataGridTextColumn Header="Subject" Width="2*" Binding="{Binding NameColumn}"/>
<DataGridTextColumn Header="Weekly" Width="*" Binding="{Binding ClassesColumn}"/>
另一种方法是将AutoGenerateColumns
DataGrid 的属性设置为 true 并省略 XAML 中的列定义。但是你对网格没有太多的控制权。
推荐阅读
- vulkan - Vulkan:在后续 RenderPass 中读取附件数据的方式
- postgresql - psql 创建用户 SUPER USER WITH 密码抛出语法错误消息
- java - 如何让我的应用在给定时间发送定期短信?
- html - 如何在带有 CSS 类的按钮中显示 Bootstrap 4 SVG 图标?
- python-3.x - 烧瓶表单不发送发布请求
- elasticsearch - 直接放置带参数的过滤器会导致错误
- android - 有没有办法知道手机的确切方向?
- javascript - npm:在 linux ubuntu 中使用 npm 命令时找不到模块 semver 错误
- laravel - 错误 60 SSL 证书问题:无法获取本地颁发者证书-paypal-laravel
- javascript - 插入输入时如何自动提交表单?