2011-10-27 3 views
1

Я создаю список привязки BindingList<RunData> и передаю его через CustomMessageBox.Show(), но DataGridView не отображает элементы списка.C# DataGridView.DataSource = BindingList не работает

public partial class CustomMessageBox : Form 
{ 
    #region Fields. 

    private static CustomMessageBox customMessageBox; 

    private static String selectedDateTime; 

    #endregion 

    #region Properties. 

    internal String SelectedDateTime 
    { get { return CustomMessageBox.selectedDateTime; } } 

    #endregion 

    #region Constructors. 

    private CustomMessageBox() 
    { 
     InitializeComponent();    
    } 

    #endregion 

    #region Methods. 

    internal static DialogResult Show(BindingList<RunData> dataGridViewData) 
    { 
     CustomMessageBox.customMessageBox = new CustomMessageBox(); 
     CustomMessageBox.customMessageBox.dataGridViewRunData.AutoGenerateColumns = true; 
     CustomMessageBox.customMessageBox.dataGridViewRunData.DataSource = dataGridViewData;    
     return CustomMessageBox.customMessageBox.ShowDialog();    
    } 

    #endregion 
} 

internal class RunData 
{ 
    #region Fields. 

    private String dateTime; 

    private String name; 

    private String product; 

    private String result; 

    #endregion 

    #region Properties. 

    internal String DateTime 
    { get { return this.dateTime; } } 

    internal String Name 
    { get { return this.name; } } 

    internal String Product 
    { get { return this.product; } } 

    internal String Result 
    { get { return this.result; } } 

    #endregion 

    #region Constructors. 

    internal RunData(String dateTime, String name, String product, String result) 
    { 
     this.dateTime = dateTime; 
     this.name = name; 
     this.product = product; 
     this.result = result; 
    } 

    #endregion 
} 

Я никогда не использовал BindingList раньше, но из примеров, которые я нашел в Интернете, похоже, я сделал все в порядке. Любая помощь будет оценена по достоинству.

Спасибо!

EDIT

Я использую .NET 2.0, если это делает никакой разницы.

+0

Вам не хватает функции .Bind() после установки источника данных в функции show? –

+0

Попробуйте вызвать 'ResetBindings()' после установки 'DataSource'. – harlam357

ответ

5

В моем тестировании я обнаружил, что класс модели (т. Е. RunData) и/или свойства должны быть общедоступными, а не внутренними.

Я создал образец класса и сделал ту же настройку, что и у вашей сетки. Это не удалось с внутренними свойствами и классом. Как только я сделал это публично, все было в порядке.

public class RunData 
    { 
     #region Fields. 

     private String dateTime; 

     private String name; 

     private String product; 

     private String result; 

     #endregion 

     #region Properties. 

     public String DateTime 
     { get { return this.dateTime; } } 

     public String Name 
     { get { return this.name; } } 

     public String Product 
     { get { return this.product; } } 

     public String Result 
     { get { return this.result; } } 

     #endregion 

     #region Constructors. 

     public RunData(String dateTime, String name, String product, String result) 
     { 
      this.dateTime = dateTime; 
      this.name = name; 
      this.product = product; 
      this.result = result; 
     } 

     #endregion 
    } 
+0

Да, это сработало. Странно, я действительно хочу сохранить его внутренним. Ну что ж. – john