C# Winform DataGridView

一、创建项目

新建一个winform项目,界面如下:

为了能随机的生产用户名,加了一个类 GetNameHelper,这个类的代码是从是网上复制的

接着,给 Form1 添加代码,用来测试增删改查等操作。

二、绑定空的数据源

将一个空的 List 绑定到 dataGridView1,后面再添加数据

效果: 

从上面的动图可以看到,在 DataGridView 绑定空的 List 后,给 List 添加数据,包括给 DataGridView 刷新表格,给 List 修改数据,都没有效果,DataGridView 界面没有任何变化。

控制台的输出:

三、绑定有数据的数据源

现在测试第2个问题

控制台的输出:

在添加数据后,在绑定 DataGridView 确实能显示对应的数据,但是在绑定后,如果再次添加其他数据,也会和上节一样,不会再有其他的变化,即使刷新表单也是一样

四、修改绑定的数据源

第四个按钮,可以修改数据源的数据,用第三个按钮进行刷新,DataGridView 控件刷新界面的的方法是 Invalidate ,在上面几节的测试中,都有用过。

在上面的几个测试中,测试了绑定数据源的几种情况,在 List 的长度增加, DataGridView 刷新表格

解决数据源刷新问题也很简单,设置  dataGridView1.DataSource = null;  然后重新绑定就可以了,下面是完整的代码:

 测试:

后面把代码改为在 Form1_Load 中进行绑定

private void Form1_Load(object sender, EventArgs e)
{
    //设置焦点,不让输入框一打开就聚焦
    this.ActiveControl = this.label1;
 
    dataGridView1.DataSource = dataList;
}

然后使用定时器调用 UpdateDataTable 方法来刷新数据,就再也没有这个错误了

private void UpdateDataTable()
{
    if (dataGridView1.DataSource != null)
    {
        if (UserList.Count != dataGridView1.Rows.Count)
        {
            dataGridView1.DataSource = null;
            dataGridView1.DataSource = UserList;
            return;
        }
        dataGridView1.Invalidate();
    }
}

但是又出现了一个新的错误,由于绑定了一个空的 List,运行时候点击 dataGridView1 表单,就会报下面的错误

所以,还是用下面的代码

/// <summary>
/// 刷新表格
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
private void UpdateDataTable<T>(List<T> list)
{
    if (list.Count == 0)
    {
        dataGridView1.DataSource = null;
        return;
    }
    if (dataGridView1.DataSource != null)
    {
        if (dataGridView1.Rows.Count != list.Count)
        {
            dataGridView1.DataSource = null;
            dataGridView1.DataSource = list;
            return;
        }
        dataGridView1.Invalidate();
        return;
    }
    if (dataGridView1.DataSource == null)
        dataGridView1.DataSource = list;
}

如果需要调整列的宽度,可以这么写

/// <summary>
/// 刷新表格
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
private void UpdateDataTable<T>(List<T> list)
{
    if (list == null || list.Count == 0)
    {
        dataGridView1.DataSource = null;
        return;
    }
    if (dataGridView1.DataSource != null)
    {
        if (dataGridView1.Rows.Count != list.Count)
        {
            dataGridView1.DataSource = null;
            dataGridView1.DataSource = list;
            DataGridView1Resize();
            return;
        }
        dataGridView1.Invalidate();
        return;
    }
    if (dataGridView1.DataSource == null)
    { 
        dataGridView1.DataSource = list;
        DataGridView1Resize();
    }
}
 
/// <summary>
/// 调整 DataGridView1 的表格宽度
/// </summary>
private void DataGridView1Resize()
{
    //根据实际情况来写
    dataGridView1.Columns[0].Width = 130;
    dataGridView1.Columns[1].Width = 80;
    dataGridView1.Columns[2].Width = 80;
}

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值