Заполнение пустого WinForms DataGridView с классом, унаследованным от DataGridView - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть DataGridView, который я добавил в форму с именем dgv.Я пытаюсь заполнить этот объект объектом пользовательского типа, который наследуется от DataGridView, MyDataGridView: DataGridView.Я вошел в окно наблюдения и убедился, что в dgv есть столбцы и строки, которые существуют после того, как я установил dgv = myDgv, хотя он не заполняет представление данных в форме какими-либо столбцами или строками.Когда я вместо этого добавляю тестовый столбец в dgv, он действительно отображается в форме.Причина, по которой я строю это таким образом, заключается в том, что MyDataGridView имеет возможность подсветки ячеек на основе их значения настраиваемым способом.Пока единственный работающий процесс - это добавить каждый столбец по имени заголовка и тексту заголовка и добавить каждую ячейку по его cell.value.Если бы я сделал это, я бы потерял все форматирование в myDgv.

Мои вопросы: я просто пропускаю какое-то свойство видимости, так как я создал экземпляр DataGridView по умолчанию и заполнил столбцы / строки в myDgv вместо того, чтобы позволятьVisualStudio создает DataGridView и создает его для меня в формируемом редакторе.

Первый пример: не заполняет DataGridView

public partial class ReportForm: Form
{
     public ReportForm()
     {
         InitializeComponent();
         dgv=mydgv;
     }
}

Второй пример: также происходит сбой с исключением enter image description here

Static class MainClass
{
public static void CloneFrom(this DataGridView dgv_target, DataGridView dgv_2copy)
        {
            try
            {
                if (dgv_target.Columns.Count == 0)
                {
                    foreach (DataGridViewColumn dgvc in dgv_2copy.Columns)
                    {
                        dgv_target.Columns.Add(dgvc.Clone() as DataGridViewColumn);
                    }
                }
                DataGridViewRow row = new DataGridViewRow();
                for (int i = 0; i < dgv_target.Rows.Count; i++)
                {
                    row = (DataGridViewRow)dgv_target.Rows[i].Clone();
                    int intColIndex = 0;
                    foreach (DataGridViewCell cell in dgv_target.Rows[i].Cells)
                    {
                        row.Cells[intColIndex].Value = cell.Value;
                        intColIndex++;
                    }
                    dgv_target.Rows.Add(row);
                }
                dgv_target.AllowUserToAddRows = false;
                dgv_target.Refresh();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
}

public partial class ReportForm: Form
{
     public ReportForm()
     {
         InitializeComponent();
         dgv.CloneFrom(mydgv);
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...