Подтвердить что ты не робот

Как отключить возможность выбора в DataGridView?

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

Как я могу это сделать?

4b9b3361

Ответ 1

Я бы пошел с этим:

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

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

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

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

Ответ 2

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

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

Ответ 3

Enabled свойство false

или

this.dataGridView1.DefaultCellStyle.SelectionBackColor = this.dataGridView1.DefaultCellStyle.BackColor;
this.dataGridView1.DefaultCellStyle.SelectionForeColor = this.dataGridView1.DefaultCellStyle.ForeColor;

Ответ 4

Я исправил это, установив для свойства Enabled значение false.

Ответ 5

Я установил для всех свойств AllowUser... значение false, ReadOnly до true, RowHeadersVisible до false, ScollBars до None, затем faking предотвращение выбора работал лучше всего для меня. Не устанавливать 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);

Ответ 6

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

row.DataGridView.Enabled = false;

row.DefaultCellStyle.BackColor = Color.LightGray;

row.DefaultCellStyle.ForeColor = Color.DarkGray;

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

Ответ 7

Мне понравился user4101525 лучший ответ в теории, но на самом деле он не работает. Выбор не наложение, поэтому вы видите все, что находится под контролем

Ответ Рамги Борха не касается того факта, что стиль по умолчанию вообще не является цветом, поэтому его применение не поможет. Это обрабатывает стиль по умолчанию и работает, если вы применяете свои собственные цвета (что может быть то, что edhubbell называет неприятными результатами)

dgv.RowsDefaultCellStyle.SelectionBackColor = dgv.RowsDefaultCellStyle.BackColor.IsEmpty ? System.Drawing.Color.White : dgv.RowsDefaultCellStyle.BackColor;
dgv.RowsDefaultCellStyle.SelectionForeColor = dgv.RowsDefaultCellStyle.ForeColor.IsEmpty ? System.Drawing.Color.Black : dgv.RowsDefaultCellStyle.ForeColor;

Ответ 8

Вы должны создать собственный DataGridView

'

namespace System.Windows.Forms
{
    class MyDataGridView : DataGridView
    {
        public bool PreventUserClick = false;

        public MyDataGridView()
        {

        }
        protected override void OnMouseDown(MouseEventArgs e)
        {
            if (PreventUserClick) return;

            base.OnMouseDown(e);
        }
    }
}

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

затем перейдите к .Designer.cs и измените старый DataGridView на новый, не беспокоясь о вашем предыдущем коде.

private System.Windows.Forms.DataGridView dgv; // found close to the bottom

...

private void InitializeComponent() {
    ...
    this.dgv = new System.Windows.Forms.DataGridView();
    ...
}

к (соответственно)

private System.Windows.Forms.MyDataGridView dgv;

this.dgv = new System.Windows.Forms.MyDataGridView();

Ответ 9

Я знаю, что это вопроС#C, но для тех, кто на .net, как я:

Private Sub DGVName_SelectionChanged() Handles DGVName.SelectionChanged
 DGVName.ClearSelection()
End Sub

Ответ 10

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

Код в примере MSDN иллюстрирует использование этого свойства в элементе управления 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;