C#中Combobox控制元件的SelectedIndexChanged事件的執行順序
阿新 • • 發佈:2019-02-12
這裡發生了什麼?
不是很理解控制元件執行的順序和次數。請先看程式。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace MIS_Information { public partial class frmHelpdeskModify : Form { int helpdeskid; DataSet ds=new DataSet(); SqlConnection cn = new SqlConnection(Properties.Settings.Default.HY_MISConnectionString); public frmHelpdeskModify(int helpdesk) { InitializeComponent(); helpdeskid = helpdesk; } private void frmHelpdeskModify_Load(object sender, EventArgs e) { getHelpdesk(); getcompany(); } private void getHelpdesk() { if (helpdeskid != 0) { string sql = "Select HelpdeskID,HelpdeskUserName,Department,QuestionTitle,WhoAnswer,QuestionClassID,AnswerDetail,BeginTime,EndTime,Endsign,UserOrSystem,CompanyID From HelpdeskTable Where HelpdeskID=" + helpdeskid; SqlDataAdapter da = new SqlDataAdapter(sql, cn); cn.Open(); da.Fill(ds, "HelpdeskTable"); //MessageBox.Show(ds.Tables["HelpdeskTable"].Rows[0]["CompanyID"].ToString()); cn.Close(); } } private void getcompany() { string sql = "Select CompanyID,CompanyName From CompanyTable"; SqlDataAdapter da = new SqlDataAdapter(sql, cn); cn.Open(); da.Fill(ds, "CompanyTable"); cn.Close(); CompanyTable.DataSource = ds.Tables["CompanyTable"]; CompanyTable.DisplayMember = "CompanyName"; CompanyTable.ValueMember = "CompanyID"; if (helpdeskid != 0) CompanyTable.SelectedValue = int.Parse(ds.Tables["HelpdeskTable"].Rows[0][11].ToString()); MessageBox.Show("End getCompany()"); } private void CompanyTable_SelectedIndexChanged(object sender, EventArgs e) { if (CompanyTable.SelectedIndex >=-1) { // if (ds.Tables["DepartmentTable"] != null) ds.Tables["DepartmentTable"].Clear(); DataRowView adv = (DataRowView)CompanyTable.SelectedItem; int CompanyID = int.Parse(adv.Row["CompanyID"].ToString()); string sql = "Select DepartmentID,DepartmentName From DepartmentTable Where CompanyID=" + CompanyID; SqlDataAdapter da = new SqlDataAdapter(sql, cn); cn.Open(); da.Fill(ds, "DepartmentTable"); cn.Close(); DepartmentTable.DataSource = ds.Tables["DepartmentTable"]; DepartmentTable.DisplayMember = "DepartmentName"; DepartmentTable.ValueMember = "DepartmentID"; if (helpdeskid != 0) DepartmentTable.SelectedValue = int.Parse(ds.Tables["HelpdeskTable"].Rows[0][2].ToString()); } } } }
疑問一:
程式中通過斷點發現,運後selectedindexchanged事件發生了3次,不是很能理解為什麼會有三次的執行,想來想去能想到就是2次,第1次是在填充資料時,第2次是在改變資料時,第3次是什麼呢?再想了想會不會是在初始化的時候也運行了呢?但有考慮到初始化時SelectedIndex應當是=-1的,應當不會執行呀。我在每次執行後都觀察了SelectedIndex的值,分別是:0,null,1。
這個第1次的0是填充資料時的首個值,但是第2次的null是怎麼產生的呢?第3次就是程式helpdeskid>0所產生的。
有沒有人可以指點下第2次的SelectedIndex的null值是怎麼來的呢?
週五,下班時間了,把問題稍後先放鬆會,晚點上微軟去看看。