winforms 无法在C#中以编程方式更改数据网格视图单元格的显示值

irlmq6kh  于 2022-12-19  发布在  C#
关注(0)|答案(1)|浏览(190)

我尝试通过代码手动设置数据网格视图中单元格的值,但是运行时没有任何变化。我将这些单元格的值打印到控制台,单元格的值已设置,但没有显示。

`TheLoaiList = BUSTheLoai.Instance.GetAllTheLoai();
        TheLoaiGrid.DataSource = TheLoaiList;
        int i = 0;
        foreach (DataGridViewRow row in TheLoaiGrid.Rows)
        {
            row.Cells["SoTuaSach"].Value = "10";
            Console.WriteLine(row.Cells["SoTuaSach"].Value);
            i++;
        }`
wz8daaqr

wz8daaqr1#

你的代码看起来是正确的。绑定TheLoaiGrid.DataSourceTheLoaiList是 * 好 * 的,因为你可以通过改变TheLoaiList来改变DataGridView中的内容。下一步你可能想尝试让列表中的 * 项目 * 以同样的方式工作(使用绑定),这样当你执行循环时,你可以修改 * 数据 * 而不是DataGridViewRow

foreach (TheLoai theLoai in TheLoaiList)
{
    theLoai.SoTuaSach = "10"; 
}

要使其正常工作,需要对表示行项的类做一些小的更改。假设您以如下方式定义TheLoaiList

BindingList<TheLoai> TheLoaiList { get; } = new BindingList<TheLoai>();

下面是一个使用INotifyPropertyChanged在属性更改时自动通知DataGridView的示例:

// using System.Runtime.CompilerServices;
class TheLoai : INotifyPropertyChanged
{
    string _soTuaSach = string.Empty;
    public string SoTuaSach
    {
        get => _soTuaSach;
        set
        {
            if (!Equals(_soTuaSach, value))
            {
                _soTuaSach = value;
                OnPropertyChanged();
            }
        }
    }
    string _column2 = string.Empty;
    public string Column2
    {
        get => _column2;
        set
        {
            if (!Equals(_column2, value))
            {
                _column2 = value;
                OnPropertyChanged();
            }
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

如果你想尝试一下,这里有一个最小的工作sample

相关问题