DataGridView, показывающий пустые строки при назначении в список типов, содержащий внутренние свойства - PullRequest
0 голосов
/ 31 мая 2019

Я столкнулся с проблемой, которая противоречила моим базовым концепциям C # в Модификаторах доступа.Поэтому я создаю пример приложения, воспроизводящего тот же сценарий.

Существует родительская форма с кнопкой нажатия, в случае которой появляется новая форма с DataGridView.Источник данных - это статическая строка, строка и свойства являются внутренними, поскольку я использую все в одном проекте.

К моему удивлению, было сделано 5 строк, поскольку у меня было 5 элементов данных, привязанных к этой сетке, но они былипросто пустые строки.Затем я сделал свойства общедоступными и смог их получить.Все строки были заполнены правильными данными во второй раз.

Родительская форма

namespace SampleApp{
public partial class Form1 : Form
{
    List<ItemModel> modelList = new List<ItemModel>();

    public Form1()
    {
        InitializeComponent();
    }

    private void btnClick_Click(object sender, EventArgs e)
    {
        LoadData();
        using (SeperateWindow window = new SeperateWindow(modelList))
        {
            window.PopulateGrid();
            if(window.ShowDialog() == DialogResult.OK)
            {

            }
        }
    }

    public void LoadData()
    {
        for(int i= 0; i < 5; i++)
        {
            ItemModel item = new ItemModel($"Name { i}", i.ToString());
            modelList.Add(item);
        }
    }
}

Класс модели

namespace SampleApp.Model{
sealed class ItemModel
{
    internal string Textvalue { get; set; }
    internal string ID { get; set; }
    internal ItemModel(string text,string id)
    {
        Textvalue = text;
        ID = id;
    }
}

Дочерняя форма, содержащая GridView

namespace SampleApp.Model{
public partial class SeperateWindow : Form
{
    List<ItemModel> _modelList = new List<ItemModel>();
    internal SeperateWindow(List<ItemModel> modelList)
    {
        _modelList = modelList;
        InitializeComponent();
    }

    public void PopulateGrid()
    {
        dataGridView1.DataSource = _modelList;
    }
}

Моя проблема в том, что все находится в одном проекте, а класс модели и дочерняя форма тоже находятся в одной папке, а также почему яполучать пустые строки?Учитывая, что это работает нормально, если я сделаю их публичными.

1 Ответ

1 голос
/ 31 мая 2019

С MSDN

Свойства, которые вы используете в качестве свойств источника привязки для привязки , должны быть открытыми свойствами вашего класса. Явно определенные свойства интерфейса не могут быть доступны для целей привязки, равно как и защищенные, частные, внутренние или виртуальные свойства, которые не имеют базовой реализации.

Также, пожалуйста, обратитесь к этому вопросу , в котором обсуждалась разница между public и internal ключевыми словами в привязке данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...