Я хочу использовать только DataGridView
только для отображения вещей, и я хочу, чтобы пользователь не мог выбирать любую строку, поле или что-либо из DataGridView
.
Как я могу это сделать?
Я хочу использовать только DataGridView
только для отображения вещей, и я хочу, чтобы пользователь не мог выбирать любую строку, поле или что-либо из DataGridView
.
Как я могу это сделать?
Я бы пошел с этим:
private void myDataGridView_SelectionChanged(Object sender, EventArgs e)
{
dgvSomeDataGridView.ClearSelection();
}
Я не согласен с широким утверждением, что no DataGridView
должно быть не поддающимся выбору. Некоторые пользовательские интерфейсы создаются для инструментов или сенсорных экранов, и выбор позволяет вводить пользователя в заблуждение, чтобы думать, что выбор фактически приведет их куда-нибудь.
Настройка ReadOnly = true
в элементе управления не влияет на выбор ячейки или строки. И есть визуальные и функциональные недостатки для установки Enabled = false
.
Другой вариант - установить выбранные цвета в качестве именно того, что не выбранные цвета, но если вам приходится манипулировать обратным цветом ячейки, то этот метод также дает некоторые неприятные результаты.
Вы можете установить прозрачный цвет фона для выбранных ячеек следующим образом:
DataGridView.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.Transparent;
Enabled
свойство false
или
this.dataGridView1.DefaultCellStyle.SelectionBackColor = this.dataGridView1.DefaultCellStyle.BackColor;
this.dataGridView1.DefaultCellStyle.SelectionForeColor = this.dataGridView1.DefaultCellStyle.ForeColor;
Я исправил это, установив для свойства Enabled
значение false
.
Я установил для всех свойств 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);
Это работало для меня как шарм:
row.DataGridView.Enabled = false;
row.DefaultCellStyle.BackColor = Color.LightGray;
row.DefaultCellStyle.ForeColor = Color.DarkGray;
(где row = DataGridView.NewRow(соответствующие перегрузки);)
Мне понравился 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;
Вы должны создать собственный 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();
Я знаю, что это вопроС#C, но для тех, кто на .net, как я:
Private Sub DGVName_SelectionChanged() Handles DGVName.SelectionChanged
DGVName.ClearSelection()
End Sub
Используйте свойство 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;