2016-11-29 72 views
0

我使用ObjectListview来显示列的复选框,但有一个问题。ObjectListview复选框列没有改变状态,当点击

我的模式是这样的:

public class HocVienLopDTO 
{ 
    public HocVienDTO HocVien { get; set; } 
    public double Diem { get; set; } 
    public List<NgayHocDTO> DSNgayHoc { get; set; } 
} 

public class NgayHocDTO 
{ 
    public DateTime Ngay { get; set; } 
    public bool CoHoc { get; set; } 
} 

我想创建这样一个ListView:(Diem, DSNgayHoc[0], DSNgayHoc[1], ...)。我想使用所有DSNgayHoc列的复选框来显示它的CoHoc属性的值。所以我动态生成这样的列:

this.lstvDiemDanh.UseSubItemCheckBoxes = true; 
    List<OLVColumn> colList = new List<OLVColumn>(); 
    for (int i = 0; i < this.lop.DSNgayHoc.Count; i++) 
    { 
     OLVColumn col = new OLVColumn(); 
     col.IsHeaderVertical = true; 
     col.CheckBoxes = true; 
     col.AspectName = string.Format(string.Format("DSNgayHoc[{0}].CoHoc", i)); 
     col.Text = this.lop.DSNgayHoc[i]; 
     col.Width = 20; 
     col.IsEditable = true; 
     colList.Add(col); 
    } 

    this.lstvDiemDanh.AllColumns.AddRange(colList); 
    this.lstvDiemDanh.RebuildColumns(); 

所有复选框显示正常,但他们的状态没有改变,当我点击它们。 (总是方框)。我试图处理ChangingSubItem事件来改变currentValue和newValue,但没有运气。请帮忙!

对不起,我的英语。

+0

复选框是否正确反映了CoHoc的初始状态? –

+0

编号CoHoc的初始值为false,复选框由方块检查,我无法更改它! –

+0

您确定添加到ObjectListView的HocVienLopDTO对象实际上在DSNgayHoc列表中包含项目,并且它不为NULL或为空吗?你将'this.lop'加入OLV吗?你可能不仅仅添加一个模型对象? “方形”复选框表示OLV在访问AspectName后面的值时遇到问题。 –

回答

0

OLV正在使用反射来搜索名称为AspectName的房产。这在这种情况下不起作用,因为它不知道您正在访问列表索引。

而不是使用AspectName

// ... 
col.AspectName = string.Format(string.Format("DSNgayHoc[{0}].CoHoc", i)); 
// ... 

,你必须使用AspectGetterAspectPutter回调访问DSNgayHoc列表根据需要的。

// ... 
int listIndex = i; 
col.AspectGetter = delegate(object rowObject) { 
    HocVienLopDTO model = rowObject as HocVienLopDTO; 

    if (model.DSNgayHoc.Count > listIndex) 
     return model.DSNgayHoc[listIndex].CoHoc; 
    else 
     return false; 
}; 

col.AspectPutter = delegate(object rowObject, object value) {      
    HocVienLopDTO model = rowObject as HocVienLopDTO; 

    if (model.DSNgayHoc.Count > listIndex) 
     model.DSNgayHoc[listIndex].CoHoc = (bool)value; 
}; 
// ... 
+0

非常感谢你的工作解决方案) –

相关问题