Programing

DataGridView에서 선택하는 기능을 비활성화하는 방법은 무엇입니까?

lottogame 2021. 1. 10. 16:44
반응형

DataGridView에서 선택하는 기능을 비활성화하는 방법은 무엇입니까?


나는 나의 DataGridView것을 보여주기 위해서만 사용 하고 싶습니다. 사용자가 .NET에서 행, 필드 또는 아무것도 선택할 수 없도록하고 싶습니다 DataGridView.

어떻게 할 수 있습니까?


나는 이것으로 갈 것이다 :

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

나는 '아니오'를 선택할 수 없다는 광범위한 주장에 동의하지 않습니다 DataGridView. 일부 UI는 도구 또는 터치 스크린 용으로 제작되었으며 선택을 허용하면 사용자가 선택하면 실제로 어딘가에 도착한다고 오해합니다.

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, ReadOnlyto true, RowHeadersVisibleto false, ScollBarsto None로 설정 한 다음 선택 방지위조하는 것이 가장 효과적 이라는 것을 알았 습니다. 아니 설정 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;

(여기서 행 = DataGridView.NewRow (appropriate overloads);)


user4101525의 답변이 이론상 가장 마음에 들었지만 실제로는 작동하지 않습니다. 선택은 오버레이가 아니므로 제어되는 항목을 볼 수 있습니다.

Ramgy Borja의 대답은 기본 스타일이 실제로 색상이 아니라는 사실을 다루지 않으므로 적용하는 것이 도움이되지 않습니다. 이것은 기본 스타일을 처리하고 자신의 색상을 적용하는 경우 작동합니다 (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를 새 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();

속성 사용DataGridView.ReadOnly

The code in the MSDN example illustrates the use of this property in a DataGridView control intended primarily for display. In this example, the visual appearance of the control is customized in several ways and the control is configured for limited interactivity.

Observe these settings in the sample code:

// 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;

ReferenceURL : https://stackoverflow.com/questions/11330147/how-to-disable-the-ability-to-select-in-a-datagridview

반응형