Столбец ID DataGridView не будет скрыт
У меня есть DataGridView, привязанный к объекту ObjectDataSource, некоторые из столбцов скрыты, включая столбец идентификаторов. Проблема в том, что столбец идентификатора появляется даже тогда, когда его видимое свойство установлено в false. Кто-нибудь сталкивался с этой проблемой раньше? Установка ширины в ноль не является опцией, так как сетка не позволяет столбцам шириной не более 5 пикселей, поэтому она по-прежнему показывает столбец на сетке независимо от того, что.
Странно, что столбец ID не всегда показывался. После того, как я немного поработал над приложением, столбцы снова появились.
DataGridView не настроен на автоматическое создание столбцов. Я создаю версию 4.0.NET и С#.
Вот код в конструкторе формы.
dgvActiveMiners.AutoGenerateColumns = false;
dgvAvilableMiners.AutoGenerateColumns = false;
dgvOperationResults.AutoGenerateColumns = false;
dgvActiveMiners.Columns["dgvActiveMinersRecordId"].Visible = false;
dgvAvilableMiners.Columns["dgvAvilableMinersRecordId"].Visible = false;
dgvOperationResults.Columns["dgvOperationResultRecordId"].Visible = false;
Это сгенерированный код для сеток.
this.dgvOperationResults.AllowUserToAddRows = false;
this.dgvOperationResults.AllowUserToDeleteRows = false;
this.dgvOperationResults.AutoGenerateColumns = false;
this.dgvOperationResults.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dgvOperationResults.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.dgvOperationResultRecordId,
this.nameDataGridViewTextBoxColumn2,
this.typeIdDataGridViewTextBoxColumn,
this.amountDataGridViewTextBoxColumn,
this.operationIdDataGridViewTextBoxColumn});
this.dgvOperationResults.DataSource = this.operationResultBindingSource;
this.dgvOperationResults.Location = new System.Drawing.Point(12, 40);
this.dgvOperationResults.MultiSelect = false;
this.dgvOperationResults.Name = "dgvOperationResults";
this.dgvOperationResults.ReadOnly = true;
this.dgvOperationResults.Size = new System.Drawing.Size(498, 247);
this.dgvOperationResults.TabIndex = 16;
Я не знаю, что еще мне не хватало?
Спасибо!
Ответы
Ответ 1
Предложение 1:
Попробуйте явно установить для свойства DGV Column Visible значение false в событии FormLoad:
dataGridView.Columns["YourIdColumn"].Visible = false;
Предложение 2:
Попробуйте изменить столбец dgvActiveMinersRecordId из первого столбца в DGV до последнего столбца.
Ответ 2
Чтобы попытаться ответить на это немного более общее для следующего человека, который приходит, как я...
Это кажется ошибкой, но работа вокруг:
Убедитесь, что столбцы, которые вы хотите скрыть, отображаются последними
Это будет зависеть от вашего кода, но для некоторых это будет:
- Код SQL изменен для возврата столбцов позже
- Измените код, который добавляет столбцы datagridview, помещая столбцы "скрыть" в конце.
- Установка
Columns[x].DisplayIndex
, чтобы столбцы отображались последними, в соответствии с сообщением @Steve
Ответ 3
Может быть, немного поздно, но я избивал себя той же проблемой, у меня было две отдельные формы с DataGridViews, привязанные к различным DataTables. У одного не было проблем скрыть 1-й столбец, а с другой, все, что я пробовал, не срабатывало, до...
Примечание: [ "newCol" ] - это первый столбец (например, столбец 0) в таблице данных.
Этот код Fails скрывает столбец [0] (или по имени [ "NewRow" ])
...
MyDataGridView.DataSource = MyDatatable;
MyDataGridView.Columns["NewRow"].Visible = false; // doesn't hide (col 0)
// MyDataGridView.Columns[0].Visible = false; <<<< this didn't work either
MyDataGridView.Columns["Changed"].Visible = false;
MyDataGridView.Columns["Active"].Visible = false;
MyDatatable.RowFilter = "[Active] = 1";
...
этот код работает:
...
MyDataGridView.DataSource = MyDatatable;
MyDatatable.RowFilter = "[Active] = 1";
MyDataGridView.Columns["NewRow"].Visible = false; // YAY!! Now it hides
// MyDataGridView.Columns[0].Visible = false; <<<< and this works too
MyDataGridView.Columns["Changed"].Visible = false;
MyDataGridView.Columns["Active"].Visible = false;
...
Определите разницу? Здесь, где я указываю RowFilter.
В другой форме нет стартового RowFilter, но в обеих формах я позже изменяю RowFilter (в зависимости от действий пользователя), столбец 0 никогда не возвращается.
Кажется, слишком рано указывается RowFilter, после того как скрытые столбцы терпят неудачу для столбца 0.
Очень странно!!!! Очень расстраивает!!!!
Ответ 4
У меня такая же проблема.
Следующая строка, по-прежнему оставляет видимый столбец, хотя просмотр значения показывает его false.
dataSelected.Columns["id"].Visible = false;
У меня не было этой проблемы, пока я не установил DisplayIndex в столбце
dataSelected.Columns["ipagenum"].DisplayIndex = 6;
Перемещение оскорбительных столбцов DisplayIndex до конца исправлено.
dataSelected.Columns["id"].DisplayIndex = 15;
Ответ 5
Я хотел бы внести вклад, который не упоминался.
Каждый столбец DataGridView имеет имя свойства. Вы можете напрямую обращаться к столбцу по имени, так как вы должны обращаться к любому другому элементу. Например: ColumnName.Property = AnyProperty. В вашем случае: ColumnName.Visible = false.
Я думаю, что он более чистый, более прямой и с меньшей вероятностью совершит ошибку. Мы также немного помогаем компилятору:)
Таким образом, нет необходимости использовать имя свойства DataGridView, не найти нужный столбец, опосредующий строку (которая потенциально может быть совершена
ошибка). Я имею в виду это: YourDataGridView.Columns [ "YourColumn" ] Свойство = AnyProperty.
Ответ 6
Это нечетное.
Вы уверены, что вызываете правильное имя столбца? Я понимаю, что это была бы глупая ошибка, но это случается!
Вот простой тест, который вы можете попробовать:
void test(string columnName, bool visibility) {
if (dataGridView1.Columns.Contains(columnName)) {
dataGridView1.Columns[columnName].Visible = visibility;
} else {
throw new Exception(string.Format("Column '{0}' does not exist in DataGridView '{1}'.", columnName, dataGridView1.Name));
}
}
Ответ 7
У меня была такая же проблема, и ни одно из вышеперечисленных не работало для меня. Мое исправление заключалось в том, чтобы установить DataPropertyName, по крайней мере, для столбца, который должен быть скрыт в дизайнере в "Редактировать столбцы".
Ответ 8
Если вы хотите скрыть столбец по имени, вы должны указать имя в своей колонке. Инициализируйте свойство Name и после его использования по коду.
Ответ 9
У меня была такая же проблема, и мне не хотелось менять индекс моего столбца id на видимое свойство. Поэтому я заметил, что после того, как я указал, что column visible = false
id column visible = false
, я удалял последнюю строку DataGridView, и это то, что создавало столбец идентификаторов. Поэтому сначала удаляю строку, а затем указываю, что column = false
id column = false
.