Как отобразить строки и элементы таблицы данных во время разработки - PullRequest
3 голосов
/ 07 октября 2019

Я хотел бы отображать строки DataGridView во время разработки / разработки. Есть ли способ добиться этого?

Я пытался использовать эту функцию: datagridview1.Rows.Add(); в конструкторе элемента управления, но строки и их элементы отображаются только в время выполнения .

Причина, по которой мне нужно отображать строки и их элементы в designtime , заключается в том, что я настраиваю внешний вид элемента управления datagridview . Поэтому каждый раз, когда я делаю изменения, такие как изменение AlternatingRowColor, RowFont и т. Д. , мне нужно будет запускать элемент управления, чтобы увидеть изменения.

Это пожирает время.

Еслия могу отобразить все строки в designtime / designmode , тогда я смогу сразу же увидеть изменения по мере их внесения, что сэкономит много времени.

Я настраиваю внешний вид Datagridview Control в Windows Forms , и я использую C # .

Я не определяю элемент управления в коде, а перетаскиваю n-drop элемент управления с вкладки Controls на Winform.

Спасибо.

Ответы [ 3 ]

1 голос
/ 07 октября 2019

Я бы добавил дизайнерский глагол в контекстное меню DataGridView и назначил его желаемым поведением. Например (в качестве начальной точки для предварительного просмотра с фиктивными данными):

using System;
using System.ComponentModel.Design;
using System.Linq;
using System.Windows.Forms;
using System.Windows.Forms.Design;
public class MyDataGridView : DataGridView
{
    private IDesignerHost designerHost;
    protected override void OnHandleCreated(EventArgs e)
    {
        base.OnHandleCreated(e);
        if (DesignMode && Site != null)
        {
            designerHost = Site.GetService(typeof(IDesignerHost)) as IDesignerHost;
            var designer = (ControlDesigner)designerHost?.GetDesigner(this);
            designer?.Verbs?.Add(new DesignerVerb("Preview with dummy data", (o, a) =>
            {
                //Some logic to add dummy rows, just for example
                this.Rows.Clear();
                if (Columns.Count > 0)
                {
                    var values = Columns.Cast<DataGridViewColumn>()
                        .Select(x => GetDummyData(x)).ToArray();
                    for (int i = 0; i < 2; i++)
                        Rows.Add(values);
                }
            }));
            designer?.Verbs?.Add(new DesignerVerb("Clear data", (o, a) =>
            {
                this.Rows.Clear();
            }));
        }
    }
    private object GetDummyData(DataGridViewColumn column)
    {
        //You can put some logic to generate dummy data based on column type, etc.
        return "Sample";
    }
}

Затем в результате вы увидите два пункта меню, добавленные в контекстное меню и нажав «Предварительный просмотр с фиктивными данными»,вы увидите две фиктивные строки, добавленные к элементу управления во время разработки:

enter image description here

1 голос
/ 07 октября 2019

Я думаю, что это невозможно в WinForms DataGridView, только в WPF. Может быть, вы можете достичь этого, как-то расширив его, но это, вероятно, не просто и не стоит.

https://social.msdn.microsoft.com/Forums/windows/en-US/bc6c84c1-0a3a-4c97-8966-30be371576d9/how-to-add-some-row-to-datagridview-control-at-design-time?forum=winforms

Добавление строк в DataGridView во время разработки не являетсяподдерживается. Насколько я понимаю, это потому, что мы часто привязываем источник данных к DataGridView, чтобы генерировать строки, а не добавлять их напрямую.

0 голосов
/ 07 октября 2019

Как указано в ответе Алексея П., это невозможно. Имея немного опыта, вы сможете предсказать внешний вид.

Если у вас много визуального проектирования (т.е. из-за подробных требований вашего клиента), вы также можете немного проектировать тестовое приложение , где вы можете иметь, например, список цветов и средство выбора шрифтов, и применять выбранные свойства к таким свойствам DataGridView, как DefaultCellStyle.BackColor, .ForeColor, Font и т. Д. Во время выполнения. Просто используйте кнопку или .SelectionChanged событие для каждого свойства. Возможно, вы могли бы найти что-то законченное в CodeProject или Github ( это связано ).

...