#c# #winforms #datagridview
#c# #winforms #datagridview
Вопрос:
Я работаю над приложением winforms. В моей форме я просто перетаскиваю элемент управления DataGridView, а затем устанавливаю некоторые из его свойств с помощью окна свойств. Ниже приведен код, который я использую для заполнения моего DataGridView. Я написал этот код внутри конструктора.
List<MyCustomClass> lst = new List<MyCustomClass>();
lst = LoadList(/*some params here*/);//now uptil this point everything works i.e the list contains values as desribed.
dataGridView1.DataSource = lst;
Проблема в том, что когда я запускаю программу, в моем DataGridView ничего не отображается.
Для получения более подробной информации следующий код представляет свойства, которые я установил с помощью окна свойств
this.dataGridView1.AllowUserToAddRows = false;
this.dataGridView1.AllowUserToDeleteRows = false;
this.dataGridView1.AllowUserToResizeRows = false;
this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
this.dataGridView1.BackgroundColor = System.Drawing.Color.White;
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.GridColor = System.Drawing.Color.White;
this.dataGridView1.Location = new System.Drawing.Point(2, 329);
this.dataGridView1.Margin = new System.Windows.Forms.Padding(2);
this.dataGridView1.MultiSelect = false;
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.RowHeadersVisible = false;
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dataGridView1.Size = new System.Drawing.Size(334, 106);
this.dataGridView1.TabIndex = 0;
Комментарии:
1. Проверьте свойство AutoGenerateColumns , попробуйте установить для него значение true
2. почему люди не видят теги перед ответом. Этот пост не имеет ничего общего с ASP.NET
3. @Jame ты проверил свойство?
4. @V4Vendetta Да, но в моем случае это не работает. Я добавляю следующую строку dataGridView1.AutoGenerateColumns = true; над этой строкой: dataGridView1.DataSource = lst;
5. @Jame: В вашем коде должно быть что-то еще, что является причиной. Я только что попробовал простую форму с datagridview и списком пользовательских классов, и она отлично работает. Вы можете проверить это с помощью простого примера приложения.
Ответ №1:
Сегодня у меня почти то же самое, проблема заключалась в том, что в моем классе были общедоступные поля, а не свойства, поскольку я изменил их на общедоступные автоматические свойства — для меня это сработало хорошо.
Комментарии:
1. Была такая же проблема, я думаю, в документации от MS должно быть указано, что она не будет работать с полями. Кажется очевидным постфактум, поскольку для получения полей пришлось бы использовать отражение, но впоследствии все становится просто.
Ответ №2:
Добавьте этот код перед назначением источника данных, и все должно быть в порядке
dataGridView1.AutoGenerateColumns = true;
Редактировать
Также проверьте, есть ли у вас общедоступные свойства, которые будут использоваться для отображения содержимого класса в виде столбцов в DataGridView
Комментарии:
1. значение по умолчанию для AutoGenerateColumns имеет значение true только, если он его не трогал, тогда нет смысла снова присваивать значение true.
2. @JPReddy Совершенно верно .. но не указано, изменил ли он его значение или нет
Ответ №3:
Вам необходимо создать столбцы данных для вашей datagrid. Убедитесь, что вы также установили свойство ‘DataPropertyName’ для каждого столбца с соответствующим свойством элемента источника данных (т. Е. свойством класса ‘MyCustomClass’).
Комментарии:
1. Спасибо! Я новичок в C # и все время забываю, что свойства — это вещь. У меня возникла эта проблема именно по этой причине.
Ответ №4:
В моем случае у меня не было средств получения свойств!
Ответ №5:
При привязке в designer возникает та же проблема. Но если я привязываю в конструкторе, это работает хорошо
dataGridView1.DataSource = personBindingSource;
personBindingSource.DataSource = persons;
Ответ №6:
Я столкнулся с точно такой же проблемой. Обычно это происходит, когда ваш пользовательский класс имеет закрытые свойства, из-за которых представление таблицы данных не может их просмотреть. Вам нужно будет создать свойства для полей вашего пользовательского класса и сделать их общедоступными, чтобы при настройке источника данных из списка пользовательских классов данные были видны в представлении таблицы данных и данные могли проходить через нее.
Ответ №7:
Я нахожусь на VS2022 с VB .Net 7. Моя ситуация заключалась в том, что количество строк соответствовало источнику данных, но ничего не отображалось: вот мое решение:
- Перейдите в режим конструктора
- Нажмите на Редактировать столбцы (на панели свойств)
- Для каждого столбца введите имя столбца в вашем источнике данных в DataPropertyName
Теперь, если вы похожи на меня, у вас есть список со списком, созданный во время выполнения программы, вам нужно будет сделать это, чтобы назначить источник данных для вашего списка со списком
'mstrCellList has been populated
'the bottomline is you have to convert to the ComboBoxColumn in order to
'access the DataSource property
CType(vsFlexRouteStep.Columns(Cell), DataGridViewComboBoxColumn).DataSource _
= mstrCellList
Удачи!
Ответ №8:
Поместите это в конец:
datagridview1.Databind();
Этого должно хватить.
Комментарии:
1. Winforms datagrid не содержит метода с именем Databind().