将按钮添加到Winforms DataGridView

Bor*_*ris 8 c# datagridview winforms

有没有办法在C#中的Winforms DataGridView单元格中添加控件(例如按钮)?

(我的目标是在网格的不同单元格中放置各种控件......)

Ada*_*rth 6

DataGridViewButtonColumn是包含一个可点击的按钮,一个提供的列类型.您可以将自己的控件添加到单元格:

http://msdn.microsoft.com/en-us/library/7tas5c80.aspx

请记住,它并不总是微不足道,但我看到有人将整个DataGridView放入一个单元格 - 看起来很奇怪.

还有其他提供的列:

DataGridViewButtonColumn
DataGridViewCheckBoxColumn
DataGridViewComboBoxColumn
DataGridViewImageColumn
DataGridViewLinkColumn
DataGridViewTextBoxColumn
Run Code Online (Sandbox Code Playgroud)

您可以在Visual Studio中的设计器中的列编辑器中更改这些更改,或者将它们在代码中添加到Columns集合中.


roc*_*mar 6

你可以这样做....

有两种方法可以做到这一点:

  • 1).将DataGridViewCell转换为存在的某个单元格类型.例如,将DataGridViewTextBoxCell转换为DataGridViewComboBoxCell类型.
  • 2).创建一个控件并将其添加到DataGridView的控件集合中,设置其位置和大小以适合要作为主机的单元格.

请参阅下面的示例代码,其中说明了这些技巧.

代码片段

    private void Form5_Load(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("name");
        for (int j = 0; j < 10; j++)
        {
            dt.Rows.Add("");
        }
        this.dataGridView1.DataSource = dt;
        this.dataGridView1.Columns[0].Width = 200;

        /*
         * First method : Convert to an existed cell type such ComboBox cell,etc
         */

        DataGridViewComboBoxCell ComboBoxCell = new DataGridViewComboBoxCell();
        ComboBoxCell.Items.AddRange(new string[] { "aaa","bbb","ccc" });
        this.dataGridView1[0, 0] = ComboBoxCell;
        this.dataGridView1[0, 0].Value = "bbb";

        DataGridViewTextBoxCell TextBoxCell = new DataGridViewTextBoxCell();
        this.dataGridView1[0, 1] = TextBoxCell;
        this.dataGridView1[0, 1].Value = "some text";

        DataGridViewCheckBoxCell CheckBoxCell = new DataGridViewCheckBoxCell();
        CheckBoxCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
        this.dataGridView1[0, 2] = CheckBoxCell;
        this.dataGridView1[0, 2].Value = true;

        /*
         * Second method : Add control to the host in the cell
         */
        DateTimePicker dtp = new DateTimePicker();
        dtp.Value = DateTime.Now.AddDays(-10);
        //add DateTimePicker into the control collection of the DataGridView
        this.dataGridView1.Controls.Add(dtp);
        //set its location and size to fit the cell
        dtp.Location = this.dataGridView1.GetCellDisplayRectangle(0, 3,true).Location;
        dtp.Size = this.dataGridView1.GetCellDisplayRectangle(0, 3,true).Size;
    }
Run Code Online (Sandbox Code Playgroud)