簡體   English   中英

C#-WinForm ComboBox清除按鈕單擊

[英]C# - WinForm ComboBox Clearing On Button Click

我有一個奇怪的問題,我一直試圖解決一個星期沒有運氣。

我有一個在表單加載期間填充的組合框,即使沒有代碼也可以在單擊按鈕時清除它。

使用以下代碼填充數據庫查詢結果:

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

任何建議將不勝感激。

謝謝

您正在重用數據源正在使用的db變量。 未顯示的代碼中一定存在導致其重置數據源並因此清除組合框的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM