无法填充 DataGridView

Sco*_*ion 3 c# datagridview winforms

我是来自 DataTable 的人口 DataGridView,但收到以下错误:

DataGridView 控件的至少一列没有单元格模板

private void PopulateGridView(DataTable dt)
        {

            if (dt != null)
            {
                dataGridView1.Columns.Clear();
                dataGridView1.DataSource = null;

                foreach (DataColumn col in dt.Columns)
                {
                    //Declare the bound field and allocate memory for the bound field.
                    DataGridViewColumn datacolumn = new DataGridViewColumn();

                    //Initalize the DataField value.
                    datacolumn.DataPropertyName = col.ColumnName;

                    datacolumn.Name = col.ColumnName;

                    //Initialize the HeaderText field value.
                    datacolumn.HeaderText = col.ColumnName;


                    //Add the newly created bound field to the GridView.
                    this.dataGridView1.Columns.Add(datacolumn); // ** Error **
            }

                //Initialize the DataSource
                this.dataGridView1.DataSource = dt;
            }
Run Code Online (Sandbox Code Playgroud)

Dav*_*all 6

您看到的错误是因为您正在添加DataGridViewColumn未分配单元格模板的基本列类型。如果 DataGridView 尝试为该列分配一个新单元格,它将不知道该怎么做。

您可以选择定义列类型,也可以将列的单元格模板设置为单元格。

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
datagridview1.Columns.Add(col);
Run Code Online (Sandbox Code Playgroud)

或者

DataGridViewColumn col= new DataGridViewColumn();
DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();

col.CellTemplate = cell;
datagridview1.Columns.Add(col);
Run Code Online (Sandbox Code Playgroud)

有几种可用的列类型。

但是,您可能想要做的是让列自动生成。将 DataGridView 属性 AutoGenerate columns 设置为true(默认值),在分配数据源时创建列。

以编程方式添加列通常很有用(例如添加复选框列以允许行选择),但在这种情况下,您不需要这样做。