powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / заполнение GridControl list-ом своих структур в DevExpress
11 сообщений из 11, страница 1 из 1
заполнение GridControl list-ом своих структур в DevExpress
    #39101114
Хэфф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
подскажите, пожалуйста.
Пытаюсь кодом отрисовать на форме GridControl (рисуется успешно), после чего создать List<myStruct> (создается успешно, в нем 490 item-ов myStruct), и привязать его к GridContol-у. В итоге в GridControl-е 490 пустых строчек из одного столбца.
Как все таки отобразить в GridControl-е list?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
	public struct mResult
	{
		public string task_id_prm, task_name;
	}

	public class PrimaveraForm : Form
    {
...
        private void InitializeComponent()
        {
            this.gridCards = new DevExpress.XtraGrid.GridControl(); //гридконтрол
            this.gridViewCards = new DevExpress.XtraGrid.Views.Grid.GridView();  //гридвью
            ((System.ComponentModel.ISupportInitialize)(this.gridCards)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.gridViewCards)).BeginInit();
            this.SuspendLayout();
            // 
            // gridCards
            // 
            this.gridCards.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                | System.Windows.Forms.AnchorStyles.Left)
                | System.Windows.Forms.AnchorStyles.Right)));
            this.gridCards.Location = new System.Drawing.Point(-2, 1);
            this.gridCards.MainView = this.gridViewCards;
            this.gridCards.Name = "gridCards";
            this.gridCards.Size = new System.Drawing.Size(586, 320);
            this.gridCards.TabIndex = 0;
            this.gridCards.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
                this.gridViewCards});
            // 
            // gridViewCards
            // 
            this.gridViewCards.GridControl = this.gridCards;
            this.gridViewCards.Name = "gridViewCards";
            this.gridViewCards.OptionsBehavior.Editable = false;
            this.gridViewCards.OptionsView.ShowGroupPanel = false;


            // 
            // PrimaveraForm
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(584, 362);
            this.Controls.Add(this.gridCards);
            this.MinimizeBox = false;
            this.MinimumSize = new System.Drawing.Size(300, 200);
            this.Name = "PrimaveraForm";
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
            this.Text = "Результаты поиска ";

            ((System.ComponentModel.ISupportInitialize)(this.gridCards)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.gridViewCards)).EndInit();
            this.ResumeLayout(false);
        }

        private DevExpress.XtraGrid.GridControl gridCards;
        private DevExpress.XtraGrid.Views.Grid.GridView gridViewCards;

		private readonly List<mResult> results = new List<mResult>(); //создаем лист структур


		public PrimaveraForm(List<mResult> Nresults) 		
        {
            InitializeComponent();

            Icon = SystemIcons.Information;

	    this.results = Nresults;

            RefreshControls();
        }

        private void RefreshControls()
        {
                        gridViewCards.Columns.Clear();
			GridColumn column = new GridColumn
			{
				Name = "task_id_prm",
				FieldName = "task_id_prm",
				Caption = "task_id_prm",
				UnboundType = UnboundColumnType.Bound,
				Visible = true
			};

			GridColumn column2 = new GridColumn
			{
				Name = "task_name",
				FieldName = "task_name",
				Caption = "task_name",
				UnboundType = UnboundColumnType.Bound,
				Visible = true
			};
			gridViewCards.Columns.Add(column);
			gridViewCards.Columns.Add(column2);
                        gridCards.DataSource = results;
			gridCards.Refresh();
        }



List<mResult> Nresults - передается корректно, делаю отладочный вывод - все 490 item-ов отображаются вполне себе.
...
Рейтинг: 0 / 0
заполнение GridControl list-ом своих структур в DevExpress
    #39101324
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хэфф,

1)
Код: c#
1.
private readonly List<mResult> results = new List<mResult>(); //создаем лист структур

Зачем создаете пустой объект-лист, все равно же в конструкторе затираете ссылку поданным объектом-листом


2)
Код: c#
1.
2.
 private DevExpress.XtraGrid.GridControl gridCards;
        private DevExpress.XtraGrid.Views.Grid.GridView gridViewCards;



Это же разделяемый класс, у вас уже есть ссылки на грид и гридвью


3) myStruct - это именно структура, не класс? Где описание этой структуры


4) Перед тем как использовать данные компоненты я бы сначала посмотрел как следует их использовать, например здесь :
Зачем вы вручную определяете поля(колонки) грида? у вас на 99% названия этих полей не совпадают с названиями свойств в структуре, поэтому данные в этих полях и не отображаются. А поля источника(структуры) в гриде оказываются скрытыми.
Поэтому

Вариант1: синхронизируйте названия добавляемых в грид полей с названиями свойств в структуре
Вариант2: закомментируйте код добавления в грид этих полей

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
        private void RefreshControls()
        {
                        gridViewCards.Columns.Clear();
            //GridColumn column = new GridColumn
            //{
            //    Name = "task_id_prm",
            //    FieldName = "task_id_prm",
            //    Caption = "task_id_prm",
            //    UnboundType = UnboundColumnType.Bound,
            //    Visible = true
            //};

            //GridColumn column2 = new GridColumn
            //{
            //    Name = "task_name",
            //    FieldName = "task_name",
            //    Caption = "task_name",
            //    UnboundType = UnboundColumnType.Bound,
            //    Visible = true
            //};

            //gridViewCards.Columns.Add(column);
            //gridViewCards.Columns.Add(column2);
                        gridCards.DataSource = results;
			gridCards.Refresh();
        }
...
Рейтинг: 0 / 0
заполнение GridControl list-ом своих структур в DevExpress
    #39101477
Хэфф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blestХэфф,

1)
Код: c#
1.
private readonly List<mResult> results = new List<mResult>(); //создаем лист структур

Зачем создаете пустой объект-лист, все равно же в конструкторе затираете ссылку поданным объектом-листом

Согласен, косяк, угу. Код переделывал и не обратил внимание (изначально вручную заполнял лист).

blest2)
Код: c#
1.
2.
 private DevExpress.XtraGrid.GridControl gridCards;
        private DevExpress.XtraGrid.Views.Grid.GridView gridViewCards;



Это же разделяемый класс, у вас уже есть ссылки на грид и гридвью

Не очень понял замечания, если честно.


blest3) myStruct - это именно структура, не класс? Где описание этой структуры

Описание в коде выше:
Код: c#
1.
2.
3.
4.
5.
	
public struct mResult
{
	public string task_id_prm, task_name;
}



blest4) Перед тем как использовать данные компоненты я бы сначала посмотрел как следует их использовать, например здесь :

Пытаюсь :-) запутался вкрай. Еще и вдобавок ютуб на работе забанен :-( Если до вечера не справлюсь, попытаюсь дома уже посмотреть...

blestЗачем вы вручную определяете поля(колонки) грида? у вас на 99% названия этих полей не совпадают с названиями свойств в структуре, поэтому данные в этих полях и не отображаются. А поля источника(структуры) в гриде оказываются скрытыми.

В том то и дело, что совпадают:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public struct mResult
{
	public string task_id_prm, task_name;
}
...
GridColumn column = new GridColumn
{
	Name = "task_id_prm",
	FieldName = "task_id_prm",
	Caption = "task_id_prm",
	UnboundType = UnboundColumnType.Bound,
	Visible = true
};

GridColumn column2 = new GridColumn
{
	Name = "task_name",
	FieldName = "task_name",
	Caption = "task_name",
	UnboundType = UnboundColumnType.Bound,
	Visible = true
};


Но даже если их и не определять (хотя мне это потребуется, ибо в будущем часть колонок надо будет скрыть, Visible = false), точно так же пустая таблица на 490 строк.

blestПоэтому

Вариант1: синхронизируйте названия добавляемых в грид полей с названиями свойств в структуре

Они синхронизированы. См. выше.

blestВариант2: закомментируйте код добавления в грид этих полей

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
        private void RefreshControls()
        {
                        gridViewCards.Columns.Clear();
            //GridColumn column = new GridColumn
            //{
            //    Name = "task_id_prm",
            //    FieldName = "task_id_prm",
            //    Caption = "task_id_prm",
            //    UnboundType = UnboundColumnType.Bound,
            //    Visible = true
            //};

            //GridColumn column2 = new GridColumn
            //{
            //    Name = "task_name",
            //    FieldName = "task_name",
            //    Caption = "task_name",
            //    UnboundType = UnboundColumnType.Bound,
            //    Visible = true
            //};

            //gridViewCards.Columns.Add(column);
            //gridViewCards.Columns.Add(column2);
                        gridCards.DataSource = results;
			gridCards.Refresh();
        }


Опять же выводится таблица с пустыми 490 строками.
...
Рейтинг: 0 / 0
заполнение GridControl list-ом своих структур в DevExpress
    #39101492
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а нафига вам тут структура?
...
Рейтинг: 0 / 0
заполнение GridControl list-ом своих структур в DevExpress
    #39101503
Хэфф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ХэффblestВариант2: закомментируйте код добавления в грид этих полей

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
        private void RefreshControls()
        {
                        gridViewCards.Columns.Clear();
            //GridColumn column = new GridColumn
            //{
            //    Name = "task_id_prm",
            //    FieldName = "task_id_prm",
            //    Caption = "task_id_prm",
            //    UnboundType = UnboundColumnType.Bound,
            //    Visible = true
            //};

            //GridColumn column2 = new GridColumn
            //{
            //    Name = "task_name",
            //    FieldName = "task_name",
            //    Caption = "task_name",
            //    UnboundType = UnboundColumnType.Bound,
            //    Visible = true
            //};

            //gridViewCards.Columns.Add(column);
            //gridViewCards.Columns.Add(column2);
                        gridCards.DataSource = results;
			gridCards.Refresh();
        }


Опять же выводится таблица с пустыми 490 строками.
Прошу прощения, нет, в данном случае выводится не 490 пустых строчек, а 490 строчек одной колонкой, где содержимое каждой строчки - BackOffice.mResult (т.е. название структуры).
...
Рейтинг: 0 / 0
заполнение GridControl list-ом своих структур в DevExpress
    #39101505
Хэфф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtesа нафига вам тут структура?
Надо результат хранимки вывести - таблицу на 16 столбцов. Для упрощения пользуюсь пока 2-мя столбцами.
...
Рейтинг: 0 / 0
заполнение GridControl list-ом своих структур в DevExpress
    #39101507
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХэффRoman Mejtesа нафига вам тут структура?
Надо результат хранимки вывести - таблицу на 16 столбцов. Для упрощения пользуюсь пока 2-мя столбцами.
какое это имеет отношение к структурам? мне всё равно, не понятно, зачем для этого использовать структуру, а не класс
...
Рейтинг: 0 / 0
заполнение GridControl list-ом своих структур в DevExpress
    #39101517
Хэфф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtesкакое это имеет отношение к структурам? мне всё равно, не понятно, зачем для этого использовать структуру, а не класс

Можно и класс. Это кардинально что-то изменит?:-)
...
Рейтинг: 0 / 0
заполнение GridControl list-ом своих структур в DevExpress
    #39101570
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хэфф,

Преобразуйте поля в свойства
Код: c#
1.
2.
3.
4.
5.
6.
    
 public struct mResult
    {
        public string task_id_prm { get; set; }
        public string task_name { get; set; }
    }
...
Рейтинг: 0 / 0
заполнение GridControl list-ом своих структур в DevExpress
    #39101729
Хэфф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blestХэфф,

Преобразуйте поля в свойства
Код: c#
1.
2.
3.
4.
5.
6.
    
 public struct mResult
    {
        public string task_id_prm { get; set; }
        public string task_name { get; set; }
    }


Не помогло.

Но помогло сделать привязку листа к контролу внутри инициации формы.
...
Рейтинг: 0 / 0
заполнение GridControl list-ом своих структур в DevExpress
    #39101868
Хэфф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ХэффblestХэфф,

Преобразуйте поля в свойства
Код: c#
1.
2.
3.
4.
5.
6.
    
 public struct mResult
    {
        public string task_id_prm { get; set; }
        public string task_name { get; set; }
    }


Не помогло.

Но помогло сделать привязку листа к контролу внутри инициации формы.
И да - поля должны быть свойствами.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / заполнение GridControl list-ом своих структур в DevExpress
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]