2016-11-29 4 views
0

ObjectListviewを使用して列のチェックボックスを表示していますが、問題があります。ObjectListviewチェックボックスの列は、クリックすると状態が変化しません。

私のモデルは、このようなものです:(Diem, DSNgayHoc[0], DSNgayHoc[1], ...)

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

は、私はこのようなリストビューを作成します。そして私はすべての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(); 

すべてのチェックボックスは表示されましたが、それらをクリックしたときの状態は変更されませんでした。 (常に正方形のボックス)。 currentValueとnewValueを変更するためにChangingSubItemイベントを処理しようとしましたが、運はありませんでした。助けてください!

私の英語については残念です。

+0

このチェックボックスは、CoHocの初期状態を正しく反映していますか? –

+0

いいえ.CoHocの初期値はfalseで、チェックボックスは正方形でチェックされていますが、変更できません。 –

+0

ObjectListViewに追加しているHocVienLopDTOオブジェクトに、実際にDSNgayHocリストに項目があり、NULLでも空でもないことは確かですか? 'this.lop'をOLVに追加していますか?おそらく1つのモデルオブジェクトを追加するだけではありませんか? 「四角い」チェックボックスは、OLVがAspectNameの背後にある値にアクセスする際に問題があることを示します。 –

答えて

0

OLVは、反射を使用してAspectNameという名前のプロパティを検索しています。これは、リストインデックスにアクセスしていることを知らないため、この場合は機能しません。代わりにあなたが望むようDSNgayHocリストにアクセスするためにAspectGetterAspectPutterコールバックを使用する必要がAspectName

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

を使用しての

// ... 
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

ありがとうございました) –

関連する問題