2014-10-27 327 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))); 
    } 
    } 
}