0
public class ANote{
    public string NoteId = "";
    public string Note = "";
    public string NoteCollector = "";
    public DateTime NoteCollectionDate = DateTime.MinValue;
    public string NoteCollectionDay {
    get { return NoteCollectionDate.toString("MM/dd/yyyy") ; }
    }
    public string NoteCollectionTime {
    get { return return NoteCollectionDate.toString("hh/mm tt"); }
    }
    public DateTime ADate = DateTime.Now;
    public double AAmount = 0.0D;
    public string AName = "";
    }

和一个BindingList aList;

还有一个带有一堆 DataGridTExtBoxColumns 的网格,我尝试将它们绑定到上面的(已经填充的)列表,例如:

colDate.DataPropertyName ="NoteCollectionDay";
colTime.DataPropertyName = "NoteCollectionTime";
colName.DataPropertyName = "NoteCollector";
colADate.DataPropertyName = "ADate";
colAAmount.DataPropertyName = "AAmount";
colAName.DataPropertyName = "AName";
colNotes.DataPropertyName = "Note";

grdNotes.AutoGenerateColumns = false;
grdNotes.DataSource = aList;

但在运行时,只有我的 colDate 和 colTime 列正确填充。所有其他都是空白的。当我专门Grid.Rows[idx].Cells[idx].Value查看其他列时,它都是空的。

此外,如果我将 AutoGenerateColumns 设置为 true,我会看到一个额外的列 NoteID,它也已正确填写,但 ANote、Amount、ADate、AName 和 Note 字段仍然是空白的!

列表中的数据没有任何问题..所有类成员都有有效值。

除非我遗漏了一些东西,否则这似乎是 BindingList 或 DataGridView 的问题。如果没有,关于如何调试它的任何想法......这是一个非常简单的测试用例!

4

1 回答 1

4

您指的是数据属性名称,因此只有属性有效?

其余的是字段。尝试将它们转换为自动属性:

public string Note { get; set; }

另请注意,BindingList 只会通知订阅者列表本身的内容已更改,而不是列表中包含的对象的属性。

如果您想实现这一点,您希望您的对象实现 INotifyPropertyChanged,并在属性的 set 方法中触发通知。

于 2009-09-17T20:10:44.183 回答