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

此代码工作正常,加载表单时,组合框已填充。

还有一个按钮,单击该按钮会从组合框中获取当前选定的值并获取该按钮的数据 "fund"。获得数据后,它会设置图表并显示数据。

这也按预期工作,单击按钮时会显示图表。这是使用以下代码完成的:

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 变量。代码中一定存在某些未显示的问题,导致它重置数据源,从而清除组合框。