首页 > 解决方案 > 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。

我尝试了以下方法:

  1. 使用DataGrid.DataContext代替DataGrid.ItemSource
  2. ItemSource = "{Binding Path=subjectsTable}"在我的 xaml 代码中添加
  3. 尝试使用将行添加为项目DataGrid.Items.Add(dataRow)
  4. 为我的用户定义类的每个数据成员添加了一个getterandsetter方法Subject
  5. 我所有的变量、数据成员和数据结构都是公开的。

如果有人知道如何使数据可见,请帮助我。谢谢你。

这是我添加两个主题后发生的情况:

数据网格的输出

标签: c#wpfxamldatatabledatagrid

解决方案


您需要为 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}"/>

另一种方法是将AutoGenerateColumnsDataGrid 的属性设置为 true 并省略 XAML 中的列定义。但是你对网格没有太多的控制权。


推荐阅读