DataGridView.AutoGenerateColumns DataGridView.AutoGenerateColumns DataGridView.AutoGenerateColumns DataGridView.AutoGenerateColumns Property


DataSource 또는 DataMember 속성을 설정할 때 열이 자동으로 생성되는지 여부를 나타내는 값을 가져오거나 설정합니다.Gets or sets a value indicating whether columns are created automatically when the DataSource or DataMember properties are set.

 property bool AutoGenerateColumns { bool get(); void set(bool value); };
public bool AutoGenerateColumns { get; set; }
member this.AutoGenerateColumns : bool with get, set
Public Property AutoGenerateColumns As Boolean

속성 값

열이 자동으로 생성되어야 하면 true이고, 그렇지 않으면 false입니다.true if the columns should be created automatically; otherwise, false. 기본값은 true입니다.The default is true.


다음 코드 예제에서는 열을 수동으로 추가 하 고 설정 하는 경우 데이터 원본에 바인딩해야 하는 방법을 보여 줍니다 AutoGenerateColumnsfalse입니다.The following code example demonstrates how to add columns manually and bind them to a data source when you set AutoGenerateColumns to false. 이 예에서 DataGridView 컨트롤의 목록에 바인딩된 Task 비즈니스 개체입니다.In this example, a DataGridView control is bound to a list of Task business objects. 열 추가 되 고 바인딩되는 차례로 Task 속성을 통해는 DataGridViewColumn.DataPropertyName 속성입니다.Then, columns are added and are bound to Task properties through the DataGridViewColumn.DataPropertyName property. 이 예제는 다음 방법에서 사용할 수 있는 더 큰 예제의 일부입니다. Windows Forms DataGridViewComboBoxCell 드롭다운 목록의개체에 액세스 합니다.This example is part of a larger example available in How to: Access Objects in a Windows Forms DataGridViewComboBoxCell Drop-Down List.

public class Form1 : Form
    private List<Employee> employees = new List<Employee>();
    private List<Task> tasks = new List<Task>();
    private Button reportButton = new Button();
    private DataGridView dataGridView1 = new DataGridView();

    public static void Main()
        Application.Run(new Form1());

    public Form1()
        dataGridView1.Dock = DockStyle.Fill;
        dataGridView1.AutoSizeColumnsMode = 
        reportButton.Text = "Generate Report";
        reportButton.Dock = DockStyle.Top;
        reportButton.Click += new EventHandler(reportButton_Click);

        Load += new EventHandler(Form1_Load);
        Text = "DataGridViewComboBoxColumn Demo";

    // Initializes the data source and populates the DataGridView control.
    private void Form1_Load(object sender, EventArgs e)
        dataGridView1.AutoGenerateColumns = false;
        dataGridView1.DataSource = tasks;

    // Populates the employees and tasks lists. 
    private void PopulateLists()
        employees.Add(new Employee("Harry"));
        employees.Add(new Employee("Sally"));
        employees.Add(new Employee("Roy"));
        employees.Add(new Employee("Pris"));
        tasks.Add(new Task(1, employees[1]));
        tasks.Add(new Task(2));
        tasks.Add(new Task(3, employees[2]));
        tasks.Add(new Task(4));

    // Configures columns for the DataGridView control.
    private void AddColumns()
        DataGridViewTextBoxColumn idColumn = 
            new DataGridViewTextBoxColumn();
        idColumn.Name = "Task";
        idColumn.DataPropertyName = "Id";
        idColumn.ReadOnly = true;

        DataGridViewComboBoxColumn assignedToColumn = 
            new DataGridViewComboBoxColumn();

        // Populate the combo box drop-down list with Employee objects. 
        foreach (Employee e in employees) assignedToColumn.Items.Add(e);

        // Add "unassigned" to the drop-down list and display it for 
        // empty AssignedTo values or when the user presses CTRL+0. 
        assignedToColumn.DefaultCellStyle.NullValue = "unassigned";

        assignedToColumn.Name = "Assigned To";
        assignedToColumn.DataPropertyName = "AssignedTo";
        assignedToColumn.AutoComplete = true;
        assignedToColumn.DisplayMember = "Name";
        assignedToColumn.ValueMember = "Self";

        // Add a button column. 
        DataGridViewButtonColumn buttonColumn = 
            new DataGridViewButtonColumn();
        buttonColumn.HeaderText = "";
        buttonColumn.Name = "Status Request";
        buttonColumn.Text = "Request Status";
        buttonColumn.UseColumnTextForButtonValue = true;


        // Add a CellClick handler to handle clicks in the button column.
        dataGridView1.CellClick +=
            new DataGridViewCellEventHandler(dataGridView1_CellClick);

    // Reports on task assignments. 
    private void reportButton_Click(object sender, EventArgs e)
        StringBuilder report = new StringBuilder();
        foreach (Task t in tasks)
            String assignment = 
                t.AssignedTo == null ? 
                "unassigned" : "assigned to " + t.AssignedTo.Name;
            report.AppendFormat("Task {0} is {1}.", t.Id, assignment);
        MessageBox.Show(report.ToString(), "Task Assignments");

    // Calls the Employee.RequestStatus method.
    void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        // Ignore clicks that are not on button cells. 
        if (e.RowIndex < 0 || e.ColumnIndex !=
            dataGridView1.Columns["Status Request"].Index) return;

        // Retrieve the task ID.
        Int32 taskID = (Int32)dataGridView1[0, e.RowIndex].Value;

        // Retrieve the Employee object from the "Assigned To" cell.
        Employee assignedTo = dataGridView1.Rows[e.RowIndex]
            .Cells["Assigned To"].Value as Employee;

        // Request status through the Employee object if present. 
        if (assignedTo != null)
                "Task {0} is unassigned.", taskID), "Status Request");

Public Class Form1
    Inherits Form

    Private employees As New List(Of Employee)
    Private tasks As New List(Of Task)
    Private WithEvents reportButton As New Button
    Private WithEvents dataGridView1 As New DataGridView

    <STAThread()> _
    Public Sub Main()
        Application.Run(New Form1)
    End Sub

    Sub New()
        dataGridView1.Dock = DockStyle.Fill
        dataGridView1.AutoSizeColumnsMode = _
        reportButton.Text = "Generate Report"
        reportButton.Dock = DockStyle.Top

        Text = "DataGridViewComboBoxColumn Demo"
    End Sub

    ' Initializes the data source and populates the DataGridView control.
    Private Sub Form1_Load(ByVal sender As Object, _
        ByVal e As EventArgs) Handles Me.Load

        dataGridView1.AutoGenerateColumns = False
        dataGridView1.DataSource = tasks

    End Sub

    ' Populates the employees and tasks lists. 
    Private Sub PopulateLists()
        employees.Add(New Employee("Harry"))
        employees.Add(New Employee("Sally"))
        employees.Add(New Employee("Roy"))
        employees.Add(New Employee("Pris"))
        tasks.Add(New Task(1, employees(1)))
        tasks.Add(New Task(2))
        tasks.Add(New Task(3, employees(2)))
        tasks.Add(New Task(4))
    End Sub

    ' Configures columns for the DataGridView control.
    Private Sub AddColumns()

        Dim idColumn As New DataGridViewTextBoxColumn()
        idColumn.Name = "Task"
        idColumn.DataPropertyName = "Id"
        idColumn.ReadOnly = True

        Dim assignedToColumn As New DataGridViewComboBoxColumn()

        ' Populate the combo box drop-down list with Employee objects. 
        For Each e As Employee In employees

        ' Add "unassigned" to the drop-down list and display it for 
        ' empty AssignedTo values or when the user presses CTRL+0. 
        assignedToColumn.DefaultCellStyle.NullValue = "unassigned"

        assignedToColumn.Name = "Assigned To"
        assignedToColumn.DataPropertyName = "AssignedTo"
        assignedToColumn.AutoComplete = True
        assignedToColumn.DisplayMember = "Name"
        assignedToColumn.ValueMember = "Self"

        ' Add a button column. 
        Dim buttonColumn As New DataGridViewButtonColumn()
        buttonColumn.HeaderText = ""
        buttonColumn.Name = "Status Request"
        buttonColumn.Text = "Request Status"
        buttonColumn.UseColumnTextForButtonValue = True


    End Sub

    ' Reports on task assignments. 
    Private Sub reportButton_Click(ByVal sender As Object, _
        ByVal e As EventArgs) Handles reportButton.Click

        Dim report As New StringBuilder()
        For Each t As Task In tasks
            Dim assignment As String
            If t.AssignedTo Is Nothing Then
                assignment = "unassigned"
                assignment = "assigned to " + t.AssignedTo.Name
            End If
            report.AppendFormat("Task {0} is {1}.", t.Id, assignment)
        MessageBox.Show(report.ToString(), "Task Assignments")

    End Sub

    ' Calls the Employee.RequestStatus method.
    Private Sub dataGridView1_CellClick(ByVal sender As Object, _
        ByVal e As DataGridViewCellEventArgs) _
        Handles dataGridView1.CellClick

        ' Ignore clicks that are not on button cells. 
        If e.RowIndex < 0 OrElse Not e.ColumnIndex = _
            dataGridView1.Columns("Status Request").Index Then Return

        ' Retrieve the task ID.
        Dim taskID As Int32 = CInt(dataGridView1(0, e.RowIndex).Value)

        ' Retrieve the Employee object from the "Assigned To" cell.
        Dim assignedTo As Employee = TryCast(dataGridView1.Rows(e.RowIndex) _
            .Cells("Assigned To").Value, Employee)

        ' Request status through the Employee object if present. 
        If assignedTo IsNot Nothing Then
            MessageBox.Show(String.Format( _
                "Task {0} is unassigned.", taskID), "Status Request")
        End If

    End Sub

End Class


열에는이 속성 설정 된 경우 자동으로 생성 됩니다 true 하며 DataSource 또는 DataMember 속성은 설정 하거나 변경 합니다.Columns are automatically generated when this property is set to true and the DataSource or DataMember properties are set or changed. 열이 자동으로 수도 있습니다 때 생성 되는 AutoGenerateColumns 에서 속성이 변경 될 falsetrue입니다.Columns can also be automatically generated when the AutoGenerateColumns property is changed from false to true. 이 속성이 true 하며 DataSource 변경 되어 이전 열이 일치 하지 않는 열 DataSource 값, 데이터 일치 하지 않는 열에 삭제 됩니다.If this property is true and the DataSource changes so there are columns that do not match the columns of the previous DataSource value, data in the unmatched columns is discarded. 하는 경우이 속성은 무시 합니다 DataSource 또는 DataMember 속성이 설정 되지 않습니다.This property is ignored if the DataSource or DataMember properties are not set.

AutoGenerateColumns 로 설정 된 true, DataGridView 컨트롤 데이터 소스의 개체의 각 공용 속성에 대 한 열을 생성 합니다.When AutoGenerateColumns is set to true, the DataGridView control generates one column for each public property of the objects in the data source. 바인딩된 개체를 구현 하는 경우는 ICustomTypeDescriptor 인터페이스를 컨트롤에서 반환 된 각 속성에 대 한 열을 생성 합니다 GetProperties 메서드.If the bound objects implement the ICustomTypeDescriptor interface, the control generates one column for each property returned by the GetProperties method. 각 열 머리글 열을 나타내는 속성 이름의 값이 포함 됩니다.Each column header will contain the value of the property name the column represents.

설정 하는 경우는 DataSource 속성을 설정 AutoGenerateColumnsfalse, 열을 수동으로 추가 해야 합니다.If you set the DataSource property but set AutoGenerateColumns to false, you must add columns manually. 설정 하 여 데이터 원본에 추가 된 각 열을 바인딩할 수 있습니다는 DataGridViewColumn.DataPropertyName 속성 바인딩된 개체에서 노출 되는 속성의 이름입니다.You can bind each added column to the data source by setting the DataGridViewColumn.DataPropertyName property to the name of a property exposed by the bound objects.


설정 합니다 DataSource Windows Forms 디자이너에서 자동으로 설정 합니다 AutoGenerateColumns 속성을 false 추가 하 고 데이터 소스의 각 속성에 대 한 열을 바인딩하는 코드를 생성 합니다.Setting the DataSource in the Windows Forms Designer automatically sets the AutoGenerateColumns property to false and generates code to add and bind a column for each property in the data source. 디자인 타임에 생성 되는 코드를 다음 예에서 같이 코드를 수동으로 추가 하는 것과 같습니다.The code that is generated at design-time is equivalent to the manually added code shown in the following example. 런타임에 발생 하는 열의 자동 생성 동일 하지 않습니다 경우는 AutoGenerateColumns 속성이 true합니다.It is not the same as the auto-generation of columns at run-time that occurs when the AutoGenerateColumns property is set to true.

적용 대상

추가 정보