正在将GridView绑定到动态DataTable

本文关键字:动态 DataTable 绑定 GridView | 更新日期: 2023-09-27 18:27:53

我有一个GridView,我将它绑定到运行时正在填充的DataTable。列和行的数量不是固定的。在DataTable被填充之后,我正在设置GridView到这个数据表的绑定源:

 Me.User_infoDTBindingSource.DataSource = User_infoDT

现在的问题是,网格视图根本没有显示任何列或行。我用过:

Me.UserListGridView.PopulateColumns(User_infoDT)

现在我得到了GridView中的所有列,但我在DataTable中设置的列标题都丢失了。GridView中的行仍然为空。我还使用了OptionView.EnableAppearanceEvenRow,所以我可以看到GridView中正在生成的行数(应该是这样),但仍然看不到任何数据。

我已经使用相同的数据源(数据表)在Windows DataGridView和TreeList中实现了相同的代码,它运行得很好。但在这里,我找不到任何不引起争吵的理由。

知道这些排在哪里吗?当我将绑定源的数据源设置为数据表时,我调试了代码并检查了DataTable。此时GridView.DataRowCount和GridView.Columns.Count是正确的。但是网格视图仍然没有在行中显示任何数据。

更新:我现在已经删除了绑定源,并将GridView的数据源直接设置为DataTable,它运行得很好!!当我在它们之间使用绑定源时,我很惊讶为什么这些行是不可见的。除此之外,现在所有列都有正确的标题(我在DataTable中设置了),当我使用绑定源时,这些标题会丢失。

正在将GridView绑定到动态DataTable

试试这个

using System;
using System.Data;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
  public partial class Form1 : Form
  {
    DataTable table = new DataTable();
    BindingSource bind = new BindingSource();
    public Form1()
    {
      InitializeComponent();
      table.Columns.Add(new DataColumn("Name", typeof(string)));
      table.Columns.Add(new DataColumn("Value", typeof(Int32)));
      bind.DataSource = table;
      dataGridView1.DataSource = bind;
    }
    private void button1_Click(object sender, EventArgs e)
    {
      table.Columns.Add(new DataColumn("Check", typeof(bool)));
    }
  }
}

我得到了答案。我添加了以下行:

Me.UserListGridView.Columns.Clear()
Me.UserListGridView.OptionsBehavior.AutoPopulateColumns = True
Me.User_infoDTBindingSource.DataSource = _user_info.User_infoDT
Me.User_infoDTBindingSource.RaiseListChangedEvents = True
Me.User_infoDTBindingSource.ResetBindings(True)

设置数据源后,引发列表更改事件并重置绑定解决了此问题。