我有我一直在試圖修復與沒有運氣,每週一個奇怪的問題。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);
}
任何建議將不勝感激。
由於
你可以添加GetListOfFunds()的代碼嗎? – David
我的猜測是'db'變量被兩個函數使用,並試圖重用相同的數據庫變量是清除組合框。當你複製代碼時,你正在創建一個新的/不同的db變量來使用。 – David
爲cboFundToDisplay.Items設置手錶並查看實際清除項目的步驟。 –