ProgramingTip

DataGridView 자동 맞춤 및 채우기

bestdevel 2020. 10. 18. 18:51
반응형

DataGridView 자동 맞춤 및 채우기


DataGridView. 내가 의도 한 것은 두 개의 열이 내용의 너비에 자동으로 맞춰지고 세 번째 열이 나머지 공간을 채우도록하는 것입니다.

WinForms에서 할 수 있습니까? 사용하는 경우 EF DataContext에서 데이터를로드하고 있습니다. 현재 어떻게 보이는지 이미지를 포함했습니다.

여기에 이미지 설명 입력


DataGridViewColumn.AutoSizeMode속성 을 사용합니다 .

열 0 및 1에 대해 준비 값 중 하나를 사용할 수 있습니다.

AllCells : 헤더 셀을 포함하여 열에있는 모든 셀의 내용에 맞게 열 너비가 조정됩니다.
AllCellsExceptHeader : 헤더는 모든 셀을 사용하여 열에있는 모든 셀의 내용에 맞게 열 너비가 조정됩니다.
DisplayedCells : 헤더를 포함하여 현재 화면에 셀 내용에 맞게 열의 모든 셀 내용에 맞게 열 너비가 조정합니다.
DisplayedCellsExceptHeader : 헤더 셀을 제외하고 현재 화면에 행에있는 열의 모든 셀 내용에 맞게 열 너비가 조정됩니다.

그런 다음 2 열에 채우기 값을 사용합니다.

모든 열의 너비가 컨트롤의 표시 영역을 정확히 채우도록 열 너비가 조정됩니다.

this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

user-가 지적 다른했듯이 기본값 datagridview속성 수준 에서 설정할 수 있습니다 .DataGridView.AutoSizeColumnsMode

this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

다음과 같을 수 있습니다.

this.DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;

중요 사항 :

그리드가 데이터 소스에 바인딩과 열 이 자동 생성 (경우있는 AutoGenerateColumns속성을 사실로 설정)은 사용할 필요 당신가 스타일을 적용하는 이벤트를 후에 열이 생성되었습니다.

DataBindingComplete


일부 시나리오 (예 : 코드로 셀 값 변경)에서는 DataGridView1.AutoResizeColumns();그리드를 새로 고치 려면 호출해야 합니다.


이것이 제가 가장 좋아하는 접근 방식입니다 ...

_dataGrid.DataBindingComplete += (o, _) =>
    {
        var dataGridView = o as DataGridView;
        if (dataGridView != null)
        {
           dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
           dataGridView.Columns[dataGridView.ColumnCount-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
        }
    };

제어 속성에서 속성을 변경하십시오. AutoSizeColumnsMode:Fill

또는 코드

dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;


테스트되지 않았습니다. 시도해 볼 수 있습니다. 테스트 및 작동 중입니다. 나는 당신이 당신이 필요 AutoSizeMode하는 DataGridViewColum것을 달성하기 위해 당신이 있기 때문에 바랍니다 .

설정 시도

dataGridView1.DataSource = yourdatasource;<--set datasource before you set AutoSizeMode

//Set the following properties after setting datasource
dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

작동합니다


시도해 시도.

 AutoSizeColumnMode = Fill;

public static void Fill(DataGridView dgv2)
   {
        try
        {
            dgv = dgv2;
            foreach (DataGridViewColumn GridCol in dgv.Columns)
            {
                for (int j = 0; j < GridCol.DataGridView.ColumnCount; j++)
                {
                    GridCol.DataGridView.Columns[j].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                    GridCol.DataGridView.Columns[j].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                    GridCol.DataGridView.Columns[j].FillWeight = 1;
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

AlfredBr의 답변을 기반으로, 일부 열을 숨긴 경우 다음을 사용하여 모든 열의 크기를 자동으로 조정 한 다음 마지막으로 보이는 열이 빈 공간을 채우도록 할 수 있습니다.

myDgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
myDgv.Columns.GetLastColumn(DataGridViewElementStates.Visible, DataGridViewElementStates.None).AutoSizeMode = 
    DataGridViewAutoSizeColumnMode.Fill;

public void setHeight(DataGridView src)
{
    src.Height= src.ColumnHeadersVisible ? src.ColumnHeadersHeight : 0 +   src.Rows.OfType<DataGridViewRow>().Where(row => row.Visible).Sum(row => row.Height);
}

이 시도 :

  DGV.AutoResizeColumns();
  DGV.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.AllCells;

참고 URL : https://stackoverflow.com/questions/18666582/datagridview-autofit-and-fill

반응형