2012-09-17 41 views
1

在我的DataGridView,我這樣的分配我的價值觀細胞:反思與DataGridView的

for (int i = 0; i < count; i++) 
{ 
    int j = i + 1; 
    DGVPointCtrl.Rows.Add(new DataGridViewRow()); 

    DGVPointCtrl.Rows[j].Cells["pointidentifier"].Value = pointCommonInfo[i].pointidentifier; 
    DGVPointCtrl.Rows[j].Cells["pointname"].Value = pointCommonInfo[i].pointname; 
    DGVPointCtrl.Rows[j].Cells["backup"].Value = pointCommonInfo[i].backup; 
    DGVPointCtrl.Rows[j].Cells["covenable"].Value = pointCommonInfo[i].covenable; 
    DGVPointCtrl.Rows[j].Cells["covlifetime"].Value = pointCommonInfo[i].covlifetime; 
    DGVPointCtrl.Rows[j].Cells["covtarget"].Value = pointCommonInfo[i].covtarget; 
    DGVPointCtrl.Rows[j].Cells["description"].Value = pointCommonInfo[i].description; 
    DGVPointCtrl.Rows[j].Cells["historyenable"].Value = pointCommonInfo[i].historyenable; 
    DGVPointCtrl.Rows[j].Cells["pointaddress"].Value = pointCommonInfo[i].pointaddress; 
    DGVPointCtrl.Rows[j].Cells["pointtype"].Value = pointCommonInfo[i].pointtype; 
    DGVPointCtrl.Rows[j].Cells["activetext"].Value = pointSpecificInfo[i].activetext; 
    DGVPointCtrl.Rows[j].Cells["alarmenable"].Value = pointSpecificInfo[i].alarmenable; 

    DGVPointCtrl.Rows[i].Cells["alarmenablehigh"].Value = pointSpecificInfo[i].alarmenablehigh; 
    DGVPointCtrl.Rows[i].Cells["alarmenablelow"].Value = pointSpecificInfo[i].alarmenablelow; 
    DGVPointCtrl.Rows[j].Cells["alarmvalue"].Value = pointSpecificInfo[i].alarmvalue; 
    DGVPointCtrl.Rows[j].Cells["correctvalue"].Value = pointSpecificInfo[i].correctvalue; 
    DGVPointCtrl.Rows[j].Cells["covincrement"].Value = pointSpecificInfo[i].covincrement; 
    ... 

漂亮的髒東西。小區名稱符合我的pointCommonInfo和pointSpecificInfo的列表的屬性,所以我決定做使用反射:

for (int i = 0; i < count; i++) 
{ 
    int j = i + 1; 
    DGVPointCtrl.Rows.Add(new DataGridViewRow()); 
    FieldInfo[] fieldCommon = typeof(PointCommonInformation).GetFields(); 
    FieldInfo[] fieldSpecific = typeof(PointSpecificInformation).GetFields(); 
    foreach (FieldInfo field in fieldCommon) 
    { 
     DGVPointCtrl.Rows[j].Cells[field.Name].Value = //? 
    } 

    foreach (FieldInfo field in fieldSpecific) 
    { 
     DGVPointCtrl.Rows[j].Cells[field.Name].Value = //? 
    } 
} 

我可以得到場的名字,但我不知道如何使用實際訪問它們反射。任何指導將不勝感激。

回答

2

如果你說 - 單元名稱匹配pointCommonInfo和pointSpecificInfo的屬性 - 那麼你應該使用的GetProperties()而不是GetFields()。你可以實現它如下:

Type commonType = typeof(PointCommonInformation); 

foreach (PropertyInfo item in commonType.GetProperties()) 
{ 
     object propertyObject = item.GetValue(pointCommonInfo, null); 
     string propertyValue = propertyObject == null ? string.Empty : propertyObject.ToString(); 
     DGVPointCtrl.Rows[j].Cells[item.Name].Value = propertyValue;  
}