我對C#相當陌生,對於處理靜態類/方法也很新穎。我正在開發一個應用程序,它以前只是一個獨立的應用程序,現在正在轉換爲一個插件應用程序。我有1個插件是全局數據表,另一個插件是使用全局數據表副本的模型,但可以在運行模型之前進一步操作它。 因此,我創建了一個名爲DatasheetControl的自定義控件。全局數據表插件和Modeling插件使用控件的一個實例。我正在修復與從獨立數據錶轉到使用兩個不同插件訪問此控件相關的錯誤。 控件用於獲取和設置列信息的類。C#將靜態方法改爲不是靜態的
public class dtColumnInformation
{
//table to operate with
private DataTable _dt = null;
//dictionary to hold column info
private Dictionary<string, bool> dictColstatus = null;
//class variable
private static dtColumnInformation dtCI = null;
// method initializes a datatable cols information structure to all enabled
public dtColumnInformation(DataTable dt)
{
if (dt != null)
{
_dt = dt.Copy();
dictColstatus = new Dictionary<string, bool>();
for (int c = 0; c < _dt.Columns.Count; c++)
{
dictColstatus.Add(_dt.Columns[c].ColumnName.ToString(), true);
}
}
}
// constructor optionally calls method to init the column information structure
// and return the itself - singleton
public static dtColumnInformation getdtCI(DataTable dt, bool init)
{
//pass null after initialization to access the DTcolInfo property
//or pass init=true (after import) to initialize
if (dtCI == null || init) dtCI = new dtColumnInformation(dt);
return dtCI;
}
// method returns the enable/disable status of the column name (key)
public bool getColStatus(string key)
{
//returns the status of a row
bool boolStatus;
dictColstatus.TryGetValue(key, out boolStatus);
return boolStatus;
}
// method to set a table column to enable/disable
public void setColStatus(string key, bool val)
{
//sets the status of a column
dictColstatus[key] = val;
}
// property - structure to return column status of all columns in table...
public Dictionary<string, bool> DTColInfo
{
//returns a col-status dictionary for all cols in the datatable
set { dictColstatus = value; }
get { return dictColstatus; }
}
這是與類似以下的調用幾個地點(包括全球數據表插件)習慣:
//(builds dictionary of keys, <string>datetime and values <bool>enabled/disabled col)
dsControl1.DTCI = VBCommon.Metadata.dtColumnInformation.getdtCI(dsControl1.DT, true);
於是,我開始明白這是爲什麼不工作。當我在全局數據表和模型之間來回切換時,dictColStatus沒有保持每個狀態。當我右鍵單擊某個列標題並想要選擇是啓用禁用的列還是禁用它時,這會起作用。此函數的方法查看dictColStatus中的內容,以便確定在右鍵單擊菜單中填充哪些選項。
我需要更改此dtColumnInformation類中的靜態內容,使其不是靜態的,因此控件的每個實例都將保持不變。我知道我需要做一些與實例化dtColumnInformation類的實例..但
private static dtColumnInformation dtCI = null;
和
public static dtColumnInformation getdtCI(DataTable dt, bool init)
扔我。我不完全清楚他們在做什麼以及如何在整個班級中進行更改以不使用靜態事物。 謝謝!
歡迎來到C#!您可能想看看.NET指南的名稱:http://msdn.microsoft.com/en-us/library/ms229002 – Tergiver