2014-10-27 189 views
0

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

Me.User_infoDTBindingSource.DataSource = User_infoDT 

现在prblem是,束腰观点是完全无法显示任何行或列。 我用:

Me.UserListGridView.PopulateColumns(User_infoDT) 

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

我已经使用相同的数据源(数据表)实现了与Windows DataGridView和TreeList相同的代码,它的工作完美。但是在这里我找不到任何没有得到这些行的原因。

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

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

+0

你试过设置autogeneratecolumns = true – Mohamed 2014-10-27 08:42:22

+0

我有devexpress GridView。我只是尝试在这里使用autogeneratecolumns替换Me.UserListGridView.OptionsBehavior.AutoPopulateColumns = True。仍然是同样的行为。行中没有数据。行正在生成,但数据仍然不可见。 – IFlyHigh 2014-10-27 08:48:52

+0

从工具箱中拉出winforms datagridview并尝试设置该网格的数据源并检查它是否加载数据 – Mohamed 2014-10-27 08:52:59

回答

0

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

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) 

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

1

试试这个

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))); 
    } 
    } 
}