2017-03-27 70 views
0

我有我一直在試圖修復與沒有運氣,每週一個奇怪的問題。C# - WinForm的組合框僅清除按鈕單擊

我有它的形式加載過程中填充的組合框,即清除自身,當我點擊一個按鈕,即使沒有代碼來做到這一點。

private void FrmChart_Load(object sender, EventArgs e) 
{ 
    listOfFunds = DatabaseLogic.GetListOfFunds(); 
    cboFundToDisplay.DisplayMember = "FundName"; 
    cboFundToDisplay.ValueMember = "FundName"; 
    cboFundToDisplay.DataSource = listOfFunds; 
} 

GetListOfFunds代碼

public static DataTable GetListOfFunds() 
{ 
    if (db == null) 
    { 
     db = new SqliteDatabase(); 
    } 

    return db.ExecuteQuery(@"SELECT DISTINCT FundName FROM [DATA]"); 
} 

此代碼工作正常,並在加載形式,組合框填充:

的是使用下面的代碼與數據庫查詢的結果填充。

也有一個按鈕,點擊它時,從下拉列表框採用當前選擇的值,並獲取數據爲「基金」。一旦它有數據,它就會建立一個圖表並顯示數據。

這也按預期工作和按鈕被點擊時,顯示該圖表。這是使用下面的代碼完成:

private void btnGetChartData_Click(object sender, EventArgs e) 
{ 
    string fundName = cboFundToDisplay.Text; 

    DataTable dt = DatabaseLogic.GetDataForFund(fundName); 

    if (crtMain.Series.Count > 0) 
    { 
     crtMain.Series.Clear(); 
    } 

    crtMain.ChartAreas[0].AxisY.Minimum = ChartLogic.GetMinimumValueWithBuffer("FundUnitPrice", dt, 1); 
    crtMain.ChartAreas[0].AxisY.Maximum = ChartLogic.GetMaximumValueWithBuffer("FundUnitPrice", dt, 1); 

    crtMain.ChartAreas[0].AxisX.Minimum = ChartLogic.GetMinimumValue("WeekNumber", dt); 
    crtMain.ChartAreas[0].AxisX.Maximum = ChartLogic.GetMaximumValue("WeekNumber", dt); 

    crtMain.Series.Add(fundName); 
    crtMain.Series[0].ChartType = SeriesChartType.Line; 

    crtMain.Series[fundName].XValueMember = "WeekNumber"; 
    crtMain.Series[fundName].YValueMembers = "FundUnitPrice"; 
    crtMain.DataSource = dt; 
} 

我所面臨的問題是,當我按一下按鈕,更新圖表,組合框的值都清楚這是意想不到的。

組合框的這個間隙發生下面的方法中的某處:

DataTable dt = DatabaseLogic.GetDataForFund(fundName); 

奇怪的是,如果我搬到這是這種方法(見下表)的代碼放到btnGetChartData_Click的身體那麼它工程和組合框不清除。

public static DataTable GetDataForFund(string fundName) 
{ 
    if (db == null) 
    { 
     db = new SqliteDatabase(); 
    } 

    List<string> parameters = new List<string>(); 

    parameters.Add(fundName); 

    return db.ExecuteQuery(@"SELECT ID, FundName, FundUnitPrice, WeekNumber FROM [DATA] WHERE [FUNDNAME] = @param1", parameters); 
} 

任何建議將不勝感激。

由於

+0

你可以添加GetListOfFunds()的代碼嗎? – David

+3

我的猜測是'db'變量被兩個函數使用,並試圖重用相同的數據庫變量是清除組合框。當你複製代碼時,你正在創建一個新的/不同的db變量來使用。 – David

+0

爲cboFundToDisplay.Items設置手錶並查看實際清除項目的步驟。 –

回答

1

要重複使用正在使用由所述數據源中的分貝變量。未顯示的代碼中必須存在一些問題,導致它重置數據源並清除組合框。

+0

這裏的問題是,DB變量是被重用因此當它試圖將數據表重新綁定到組合框時,它不再需要訪問它所需的信息,因爲db對象現在被用來查詢不同的數據集。現在全部修好了。感謝您的幫助@David。 – Ninja