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 变量。代码中一定存在某些未显示的问题,导致它重置数据源,从而清除组合框。
我有一个奇怪的问题,我已经尝试解决了一个星期但没有成功。
我有一个组合框,它在表单加载期间填充,当我单击按钮时它会自行清除,即使没有代码可以执行此操作。
使用以下代码填充数据库查询的结果:
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 变量。代码中一定存在某些未显示的问题,导致它重置数据源,从而清除组合框。