2012-07-04 2 views
40

Я хочу использовать мой DataGridView только для того, чтобы показать вещи, и я хочу, чтобы пользователь не мог выбирать любую строку, поле или что-либо из DataGridView.Как отключить возможность выбора в DataGridView?

Как это сделать?

+1

Не будучи в состоянии выбрать действительно плохой дизайн пользовательского интерфейса (очень раздражает пользователя). Что делать, если пользователь хочет что-то скопировать из вашего отчета? Я думаю, что для чтения достаточно (как описано в ответах ниже). – banging

ответ

1

Используйте DataGridView.ReadOnly property

Код в MSDN example иллюстрирует использование этого свойства в DataGridView управления предназначенного главным образом для отображения. В этом примере внешний вид элемента управления настраивается несколькими способами, и элемент управления сконфигурирован для ограниченной интерактивности.

Соблюдайте эти параметры в примере кода:

// Set property values appropriate for read-only 
// display and limited interactivity 
dataGridView1.AllowUserToAddRows = false; 
dataGridView1.AllowUserToDeleteRows = false; 
dataGridView1.AllowUserToOrderColumns = true; 
dataGridView1.ReadOnly = true; 
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; 
dataGridView1.MultiSelect = false; 
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; 
dataGridView1.AllowUserToResizeColumns = false; 
dataGridView1.ColumnHeadersHeightSizeMode = 
DataGridViewColumnHeadersHeightSizeMode.DisableResizing; 
dataGridView1.AllowUserToResizeRows = false; 
dataGridView1.RowHeadersWidthSizeMode = 
DataGridViewRowHeadersWidthSizeMode.DisableResizing; 
+2

Если бы я мог голосовать, я бы это сделал. Пока нет репутации. Однако readonly ничего не делает для предотвращения выбора пользователем ячейки. – JSON

+0

@ JSON - Не против голова вверх или вниз. Было бы здорово иметь решение вместо того, где сообщество может учиться. –

2

Я установил это, устанавливая Enabled свойство false.

+5

еще не проверен, но, полагаю, вы потеряете некоторые визуальные эффекты, если отключите datagridview. –

+0

Наверняка работа, но как @MahdiTahsildari сказал, что вы получите серый интерфейс. – C4u

+0

Примечание: тогда у вас также нет событий, подобных DoubleClick, доступных – SenioreT

91

Я бы с этим:

private void myDataGridView_SelectionChanged(Object sender, EventArgs e) 
{ 
    dgvSomeDataGridView.ClearSelection(); 
} 

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

Установка ReadOnly = true на элемент управления не влияет на выбор ячейки или строки. И есть визуальные и функциональные недостатки для установки Enabled = false.

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

+0

Вопрос «Как мне изменить цвет фона выбранной группы данных?» описывает, как установить цвет фона и переднего плана для выбранной строки: Question
Это работало достаточно хорошо для меня. – user1036944

+0

Хм .. Мне интересно, отредактированы ли все ответы на код VB.NET на C# .... – edhubbell

+0

Это лучше :) –

1

Я нашел настройки всех AllowUser... свойства false, ReadOnly к true, RowHeadersVisible на false, ScollBars к None, то faking the prevention of selection работал лучше для меня. Не устанавливая Enabled на false, он позволяет пользователю копировать данные из сетки.

Следующий код также очищает внешний вид, когда вы хотите простую сетку дисплея (предполагающие строки имеют одинаковую высоту):

int width = 0; 
for (int i = 0; i < dataGridView1.Columns.Count; i++) 
{ 
    width += dataGridView1.Columns[i].Width; 
} 

dataGridView1.Width = width; 
dataGridView1.Height = dataGridView1.Rows[0].Height*(dataGridView1.Rows.Count+1); 
9

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

DataGridView.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.Transparent; 
1

Это работает для меня как шарм:

row.DataGridView.Enabled = false; 

row.DefaultCellStyle.BackColor = Color.LightGray; 

row.DefaultCellStyle.ForeColor = Color.DarkGray; 

(где строка = DataGridView.NewRow (соответствующие перегрузки);)

1

Enabled недвижимость в false

или

this.dataGridView1.DefaultCellStyle.SelectionBackColor = this.dataGridView1.DefaultCellStyle.BackColor; 
this.dataGridView1.DefaultCellStyle.SelectionForeColor = this.dataGridView1.DefaultCellStyle.ForeColor; 
Смежные вопросы