C#开发WinForm之DataGridView开发详解
简介
DataGridView是WinForm中常用的控件之一,可以用于显示和编辑数据。本文将介绍DataGridView的使用方法,包括如何绑定数据、如何自定义样式、如何处理用户操作等。
数据绑定
要在DataGridView中显示数据,需要将数据源与控件绑定。假设我们有一个名为student的表格,包含id、name、age三个字段,并且我们已经将表格中的数据查询出来,并存在了一个名为ds的DataSet中。
我们可以通过以下代码将ds中student表的数据绑定到DataGridView中:
dataGridView.DataSource = ds.Tables["student"];
这样,DataGridView就会显示出student表的数据。如果我们想显示的不是整张表格,而是一个视图(包括部分列或只显示满足某些条件的记录),可以使用DataView来筛选。
下面的示例代码显示如何将student表中年龄大于20的记录显示在DataGridView中:
DataView dv = new DataView(ds.Tables["student"]);
dv.RowFilter = "age > 20";
dataGridView.DataSource = dv;
样式自定义
默认情况下,DataGridView显示的数据样式与平淡无味。我们可以自定义DataGridView单元格的样式和布局,让其看起来更美观。
单元格样式设置
我们可以通过设置DefaultCellStyle属性来设置所有DataGridView单元格的样式。例如,下面的代码将表格的背景色设置为浅灰色,前景色(即文字颜色)设置为黑色。
dataGridView.DefaultCellStyle.BackColor = Color.LightGray;
dataGridView.DefaultCellStyle.ForeColor = Color.Black;
我们还可以为不同的列设置不同的样式,方法是设置每列的DefaultCellStyle属性。例如,下面的代码设置第一列的文字颜色为红色,第二列的文字颜色为蓝色。
dataGridView.Columns[0].DefaultCellStyle.ForeColor = Color.Red;
dataGridView.Columns[1].DefaultCellStyle.ForeColor = Color.Blue;
单元格布局设置
另外,我们还可以设置单元格的布局,包括文字对齐方式、字体等。例如,下面的代码将单元格的内容垂直居中对齐,字体设置为12px的微软雅黑。
dataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridView.DefaultCellStyle.Font = new Font("微软雅黑", 12);
用户操作处理
当用户对DataGridView进行编辑、排序、筛选等操作时,我们可以通过事件来响应这些操作并做出相应的处理。
编辑操作处理
当用户在DataGridView中编辑单元格并提交更改后,会触发CellEndEdit事件。我们可以在该事件中获取修改后的单元格的值,并进行相应的处理。例如,下面的代码将修改后的内容存储到数据库中。
private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
DataGridViewRow row = dataGridView.Rows[e.RowIndex];
int id = Convert.ToInt32(row.Cells[0].Value);
string name = row.Cells[1].Value.ToString();
int age = Convert.ToInt32(row.Cells[2].Value);
// 将修改后的数据存储到数据库中
// ...
}
排序操作处理
当用户在DataGridView中点击列标题时,会对该列数据进行排序。我们可以在SortCompare事件中进行排序处理。例如,下面的代码实现了按照年龄升序排序的方法。
private void dataGridView_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
if (e.Column.Index == 2) // 判断是否为年龄列
{
int v1 = Convert.ToInt32(e.CellValue1);
int v2 = Convert.ToInt32(e.CellValue2);
e.SortResult = v1.CompareTo(v2); // 对年龄列进行升序排序
e.Handled = true; // 表示该事件已经处理
}
}
筛选操作处理
当用户在DataGridView的筛选框中输入筛选条件时,会触发ColumnHeaderMouseClick事件。我们可以在该事件中获取用户输入的筛选条件,并使用DataView筛选数据。例如,下面的代码筛选年龄大于20的记录。
private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (dataGridView.Columns[e.ColumnIndex].HeaderText == "年龄")
{
string filter = "age > 20";
DataView dv = new DataView(ds.Tables["student"]);
dv.RowFilter = filter;
dataGridView.DataSource = dv;
}
}
示例
下面是一个简单的示例,演示了如何使用DataGridView显示数据,并对用户的编辑、排序、筛选操作进行相应的处理。
private DataSet ds; // 数据集,包含student表格的数据
private DataView dv; // 数据视图,用于筛选数据
private void Form1_Load(object sender, EventArgs e)
{
// 加载数据并绑定到DataGridView中
ds = loadStudentData(); // 加载student表格的数据
dataGridView.DataSource = ds.Tables["student"];
// 设置默认的单元格样式和布局
dataGridView.DefaultCellStyle.BackColor = Color.LightGray;
dataGridView.DefaultCellStyle.ForeColor = Color.Black;
dataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridView.DefaultCellStyle.Font = new Font("微软雅黑", 12);
// 注册编辑、排序、筛选操作的事件处理函数
dataGridView.CellEndEdit += dataGridView_CellEndEdit;
dataGridView.SortCompare += dataGridView_SortCompare;
dataGridView.ColumnHeaderMouseClick += dataGridView_ColumnHeaderMouseClick;
}
private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
DataGridViewRow row = dataGridView.Rows[e.RowIndex];
int id = Convert.ToInt32(row.Cells[0].Value);
string name = row.Cells[1].Value.ToString();
int age = Convert.ToInt32(row.Cells[2].Value);
// 将修改后的数据存储到数据库中
// ...
}
private void dataGridView_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
if (e.Column.Index == 2) // 判断是否为年龄列
{
int v1 = Convert.ToInt32(e.CellValue1);
int v2 = Convert.ToInt32(e.CellValue2);
e.SortResult = v1.CompareTo(v2); // 对年龄列进行升序排序
e.Handled = true; // 表示该事件已经处理
}
}
private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (dataGridView.Columns[e.ColumnIndex].HeaderText == "年龄")
{
string filter = "age > 20";
if (dv == null)
{
dv = new DataView(ds.Tables["student"]);
}
dv.RowFilter = filter;
dataGridView.DataSource = dv;
}
}
private DataSet loadStudentData()
{
// 从数据库或文件中加载student表格
// ...
}
总结
DataGridView是WinForm中常用的控件之一,可以用于显示和编辑数据。我们可以通过数据绑定和样式自定义来控制其显示效果,通过事件响应来处理用户操作。祝大家使用DataGridView愉快!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#开发WinForm之DataGridView开发详解 - Python技术站