用C#写一个DataGridView控件动态添加行和列的方法,包括设置列的属性,列有下拉、文本、时间、数值等类型 ,列控件绑定数据源封装成公共类
时间: 2023-12-10 13:40:38 浏览: 84
C#动态绑定datagridview单元格控件
3星 · 编辑精心推荐
以下是一个用 C# 编写的动态添加行和列的方法,包括设置列的属性,列有下拉、文本、时间、数值等类型,列控件绑定数据源,并封装成公共类的示例代码:
```csharp
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows.Forms;
namespace DataGridViewDemo
{
public partial class Form1 : Form
{
private DataTable dataTable;
private DataGridView dataGridView;
public Form1()
{
InitializeComponent();
InitDataGridView();
}
/// <summary>
/// 初始化 DataGridView 控件
/// </summary>
private void InitDataGridView()
{
// 创建 DataGridView 控件并设置其属性
dataGridView = new DataGridView();
dataGridView.Dock = DockStyle.Fill;
dataGridView.AllowUserToAddRows = false; // 禁止自动添加新行
dataGridView.AllowUserToDeleteRows = false; // 禁止删除行
dataGridView.ReadOnly = true; // 只读
dataGridView.RowHeadersVisible = false; // 隐藏行标题
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; // 整行选中
dataGridView.MultiSelect = false; // 不允许多选
// 添加到窗体中
this.Controls.Add(dataGridView);
// 创建数据表并添加数据列
dataTable = new DataTable();
dataTable.Columns.Add("ID", typeof(int));
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Gender", typeof(string));
dataTable.Columns.Add("Birthday", typeof(DateTime));
dataTable.Columns.Add("Salary", typeof(decimal));
// 添加数据行
dataTable.Rows.Add(new object[] { 1, "张三", "男", new DateTime(1990, 1, 1), 5000 });
dataTable.Rows.Add(new object[] { 2, "李四", "女", new DateTime(1995, 2, 2), 6000 });
dataTable.Rows.Add(new object[] { 3, "王五", "男", new DateTime(1998, 3, 3), 7000 });
dataTable.Rows.Add(new object[] { 4, "赵六", "女", new DateTime(2000, 4, 4), 8000 });
// 绑定数据源
dataGridView.DataSource = dataTable;
// 添加下拉列
AddComboBoxColumn("Gender", new List<string> { "男", "女" });
// 添加时间列
AddDateTimeColumn("Birthday");
// 添加数值列
AddNumericColumn("Salary");
// 设置列宽度
dataGridView.Columns["ID"].Width = 50;
dataGridView.Columns["Name"].Width = 100;
dataGridView.Columns["Gender"].Width = 70;
dataGridView.Columns["Birthday"].Width = 120;
dataGridView.Columns["Salary"].Width = 70;
}
/// <summary>
/// 动态添加下拉列
/// </summary>
/// <param name="columnName">列名</param>
/// <param name="items">下拉列表项</param>
private void AddComboBoxColumn(string columnName, List<string> items)
{
// 创建 DataGridViewComboBoxColumn 控件并设置其属性
DataGridViewComboBoxColumn comboBoxColumn = new DataGridViewComboBoxColumn();
comboBoxColumn.DataPropertyName = columnName;
comboBoxColumn.Name = columnName;
comboBoxColumn.HeaderText = columnName;
comboBoxColumn.DataSource = items;
// 添加到 DataGridView 控件中
dataGridView.Columns.Add(comboBoxColumn);
}
/// <summary>
/// 动态添加时间列
/// </summary>
/// <param name="columnName">列名</param>
private void AddDateTimeColumn(string columnName)
{
// 创建 DataGridViewTextBoxColumn 控件并设置其属性
DataGridViewTextBoxColumn dateTimeColumn = new DataGridViewTextBoxColumn();
dateTimeColumn.DataPropertyName = columnName;
dateTimeColumn.Name = columnName;
dateTimeColumn.HeaderText = columnName;
dateTimeColumn.DefaultCellStyle.Format = "yyyy-MM-dd";
// 添加到 DataGridView 控件中
dataGridView.Columns.Add(dateTimeColumn);
}
/// <summary>
/// 动态添加数值列
/// </summary>
/// <param name="columnName">列名</param>
private void AddNumericColumn(string columnName)
{
// 创建 DataGridViewTextBoxColumn 控件并设置其属性
DataGridViewTextBoxColumn numericColumn = new DataGridViewTextBoxColumn();
numericColumn.DataPropertyName = columnName;
numericColumn.Name = columnName;
numericColumn.HeaderText = columnName;
numericColumn.DefaultCellStyle.Format = "N2"; // 保留两位小数
// 添加到 DataGridView 控件中
dataGridView.Columns.Add(numericColumn);
}
}
}
```
以上代码中,我们通过 `AddComboBoxColumn`、`AddDateTimeColumn` 和 `AddNumericColumn` 方法分别动态添加了下拉列、时间列和数值列,并设置了它们的属性。在代码中,我们使用了 `DataGridViewComboBoxColumn`、`DataGridViewTextBoxColumn` 和 `List<string>` 类型来创建这些列。同时,我们也为列控件绑定了数据源,使得它们可以显示相应的数据。最后,我们将这些方法封装在了公共类 `Form1` 中,以便其他代码可以调用它们。
阅读全文