我覺得我從過去的經歷中遺漏了一些非常重要的東西,但是,這里是:
我正在為我公司內的客戶設計一個使用 DevExpress 的最終用戶報表設計器。由于這些是動態生成的,我想讓客戶有機會自由選擇他們在報告中的內容。我沒有對所有可用值進行硬編碼,而是使用 aStartsWith和 aSubstring來檢索控制元件的名稱。我想使用這個字串值來指定他們需要的引數欄位。我不確定我是否正確地考慮了這一點,或者我是否偏離了軌道,希望有人可以再看看并給我一些建議。
任何資訊將不勝感激。
也許我需要一本字典或某種界面?我目前擁有的代碼片段如下:
private static void BuildReportHeader(Notice notice, XRControl control)
{
if (control.Name.StartsWith("lbl"))
{
string elementName = control.Name.Substring(3);
XRLabel label = (XRLabel)control;
label.Text = notice.{elementName};
}
}
顯然,這無法正常作業或無法編譯,只是在尋找 {elementName} 位的解決方案,以便我可以訪問該特定引數上的任何欄位。
uj5u.com熱心網友回復:
您可以使用反射來執行此動態值查找:notice.{elementName}.
下面的示例代碼假定elementName存在并且它是public.
如果 elementName 是一個屬性
var propertyValue = typeof(Notice).GetProperty(elementName).GetValue(notice);
- 請記住,
GetValue回傳一個object - 上面的代碼假設
elementName屬性有一個getter- 如果沒有,那么您將收到一個
ArgumentException
- 如果沒有,那么您將收到一個
如果 elementName 是一個欄位
var propertyValue = typeof(Notice).GetField(elementName).GetValue(notice);
- 上面的代碼假設
elementName指向一個欄位- 如果您提供不存在的欄位名稱或屬性/方法名稱,那么您將收到一個
NullReferenceException因為GetField會回傳null
- 如果您提供不存在的欄位名稱或屬性/方法名稱,那么您將收到一個
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/522472.html
標籤:C#网网络表格开发快递
