Столбец ID DataGridView не будет скрыт - PullRequest
14 голосов
/ 15 июня 2011

У меня есть DataGridView, привязанный к ObjectDataSource, некоторые из столбцов скрыты, включая столбец ID. Проблема заключается в том, что столбец идентификатора отображается, даже если для свойства visible установлено значение false. Кто-нибудь сталкивался с этой проблемой раньше? Установка ширины в ноль не является опцией, поскольку сетка не допускает столбцы с шириной менее 5 пикселей, поэтому она по-прежнему показывает столбец в сетке, несмотря ни на что.

Странно то, что столбец ID не всегда показывался. После того, как я немного поработал над приложением, столбцы снова появились.

DataGridView не настроен на автоматическую генерацию столбцов. Я собираюсь до версии 4.0 .NET и C #.

Вот код в конструкторе формы.

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;

Я не знаю, что еще мне не хватает?

Спасибо!

Ответы [ 9 ]

17 голосов
/ 15 июня 2011

Предложение 1:
Попробуйте явно задать для свойства Visible столбца DGV значение false в событии FormLoad:

dataGridView.Columns["YourIdColumn"].Visible = false;

Предложение 2:
Попробуйте изменить столбец dgvActiveMinersRecordId с первого столбца в DGV на последний столбец.

10 голосов
/ 16 февраля 2013

Чтобы попытаться ответить на этот вопрос более обобщенно для следующего человека, который придет, как я ...

Это похоже на ошибку, но обходной путь:

Убедитесь, что столбцы, которые вы хотите скрыть, отображаются последними

Это будет зависеть от вашего кода, но для некоторых это будет:

  • Код SQL изменен, чтобы возвращать столбцы позже
  • Изменить код, который добавляет столбцы таблицы данных, ставя столбцы "скрывать" в конце
  • Установка Columns[x].DisplayIndex таким образом, чтобы столбцы появлялись последними, согласно сообщению @ Steve
4 голосов
/ 24 ноября 2012

Может быть, немного поздно, но я избивал себя одной и той же проблемой, у меня было две отдельные формы с DataGridViews, оба связаны с различными DataTables.У одного не было проблем с сокрытием 1-го столбца, с другого все, что я пробовал, не работало, до ...

Примечание: ["newCol"] - это первый (т. е. столбец 0) столбец в таблице данных.

Этот код Не удается скрыть столбец [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.

Очень, очень странно !!!!Очень очень расстраивает !!!!

3 голосов
/ 30 мая 2012

У меня та же проблема.

В следующей строке все еще остается видимым столбец, хотя при исследовании значения отображается значение false.

dataSelected.Columns["id"].Visible = false;

У меня не было этой проблемы, пока я не установил DisplayIndex дляcolumn

dataSelected.Columns["ipagenum"].DisplayIndex = 6;

Перемещение оскорбительных столбцов DisplayIndex до конца исправило эту проблему.

dataSelected.Columns["id"].DisplayIndex = 15;
2 голосов
/ 15 января 2015

Я хотел бы представить точку зрения, которая не была упомянута.

Каждый столбец DataGridView имеет имя свойства. Вы можете напрямую получить доступ к столбцу по имени, как и к любому другому элементу. Например: ColumnName.Property = AnyProperty. В вашем случае: ColumnName.Visible = false.

Я думаю, что он чище, прямее и с меньшей вероятностью ошибиться Мы также немного помогаем компилятору:)

Таким образом, нет необходимости использовать имя свойства DataGridView, а также не находить нужный столбец, опосредующий строку (которая потенциально может быть зафиксирована). ошибка). Я имею в виду это: YourDataGridView.Columns ["YourColumn"] Property = AnyProperty.

1 голос
/ 15 июня 2011

Странно.

Вы уверены, что называете правильное имя столбца? Я понимаю, что было бы глупо сделать ошибку, но это случается!

Вот простой тест, который вы можете попробовать:

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));
  }
}
0 голосов
/ 25 июня 2018

У меня возникла та же проблема, и я не хотел менять индекс столбца id на видимое свойство works.Итак, я заметил, что после того, как я указал, что id column visible = false, я удалял последнюю строку DataGridView , и именно это заставляло отображаться столбец id.Поэтому сначала я удаляю строку, а затем указываю, что идентификатор column = false.

0 голосов
/ 16 июня 2017

Если вы хотите скрыть столбец по имени, вы должны указать имя в вашем столбце. Инициализируйте Имя свойства и после этого можете использовать его по коду.

0 голосов
/ 01 июля 2016

У меня была такая же проблема, и ничего из вышеперечисленного не помогло мне.Мое исправление состояло в том, чтобы установить DataPropertyName хотя бы для столбца, который должен быть скрыт в конструкторе в «Редактировать столбцы».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...