C# - WinForm ComboBox清除按钮单击

时间:2017-03-27 15:53:43

标签: c# winforms combobox datasource

我有一个奇怪的问题,我一直试图解决一个星期而没有运气。

我有一个在表单加载时填充的组合框,当我点击一个按钮时它会自动清除,即使没有代码可以执行此操作。

使用以下代码填充数据库查询的结果:

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

我们非常感谢任何建议。

由于

1 个答案:

答案 0 :(得分:1)

您正在重复使用数据源正在使用的 db 变量。未显示的代码中必定存在导致其重置数据源并因此清除组合框的问题。