簡體   English   中英

C#使用組合框選擇來預填充文本框

[英]C# Using ComboBox selection to PrePopulate TextBox's

我是一個非常精疲力盡的程序員,試圖編寫少量軟件。

在這段代碼中,我嘗試以新的形式選擇ComboBox時使用OleDB數據庫中的詳細信息以表單形式預填充文本框。

基本上,單擊ComboBox中的名稱將預先填充一些有關該名稱的文本框。

問題在於代碼沒有將數據中的值分配給文本框。 相反,文本框的顯示為“ 0”。

我該如何解決?

private void cbbEmployees_SelectedIndexChanged(object sender, EventArgs e)
    {
        int PayrollNo = 0;
        int AnnualHolidayEntitlemet = 0;
        int DaysTakenToDate = 0;

        string Query = "SELECT PayrollNo, AnnualHolidayEntitlement, DaysTakenToDate FROM [Employee] WHERE FirstName +  ' ' + LastName = ?";
        string ConnString = @"Provider = Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\HoliPlanData.accdb;Persist Security Info=False";

        using (OleDbConnection conn = new OleDbConnection(ConnString))
        using (OleDbCommand GetAllcmd = new OleDbCommand(Query, conn))
        {

            conn.Open();
            GetAllcmd.Parameters.Add("?", OleDbType.VarChar).Value = cbbEmployees.Text;
            GetAllcmd.Parameters.Add("@PayrollNo", OleDbType.VarChar).Value = PayrollNo;               
            GetAllcmd.Parameters.Add("@AnnualHolidayEntitlement", OleDbType.VarChar).Value = AnnualHolidayEntitlemet;
            GetAllcmd.Parameters.Add("@DaysTakenToDate", OleDbType.VarChar).Value = DaysTakenToDate;
            GetAllcmd.ExecuteScalar();


            txtPayrollNo.Text = PayrollNo.ToString();
            txtAHE.Text = AnnualHolidayEntitlemet.ToString();
            txtDTTD.Text = DaysTakenToDate.ToString();
            txtDaysRemaining.Text = (AnnualHolidayEntitlemet - DaysTakenToDate).ToString();
        }
    }

https://stackoverflow.com/users/5292801/takarii

感謝takarii ^^ ..的廣泛指導,以下是該問題的可行解決方案!

    private void cbbEmployees_SelectionChangeCommitted(object sender, EventArgs e)
    {
        string Query = "SELECT PayrollNo, AnnualHolidayEntitlement, DaysTakenToDate FROM [Employee] WHERE PayrollNo =" + Convert.ToInt32(cbbEmployees.SelectedValue); 


        string ConnString = @"Provider = Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\HoliPlanData.accdb;Persist Security Info=False";

        using (OleDbConnection conn = new OleDbConnection(ConnString))
        using (OleDbCommand GetAllcmd = new OleDbCommand(Query, conn))
        {
            DataTable dt = new DataTable();
            conn.Open();
            dt.Load(GetAllcmd.ExecuteReader());
            conn.Close();

             txtPayrollNo.Text = dt.Rows[0][0].ToString();
             txtAHE.Text = dt.Rows[0][1].ToString();
             txtDTTD.Text = dt.Rows[0][2].ToString();


        }
    }

我的代碼示例使用第一個找到的記錄的數據。

您可以選擇Top 1 ....來調整查詢,以確保記錄正確。

如果您的結果集可以包含多個記錄,則您必須在一段時間內處理該記錄(oleDR.Read()){//做某事}

private void cbbEmployees_SelectedIndexChanged(object sender, EventArgs e)
    {
        int PayrollNo = 0;
        int AnnualHolidayEntitlemet = 0;
        int DaysTakenToDate = 0;

        string Query = "SELECT TOP(1) PayrollNo, AnnualHolidayEntitlement, DaysTakenToDate FROM [Employee] WHERE FirstName" +  "' '" + "LastName = @param";
        string ConnString = @"Provider = Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\HoliPlanData.accdb;Persist Security Info=False";

        using (OleDbConnection conn = new OleDbConnection(ConnString))
        using (OleDbCommand GetAllcmd = new OleDbCommand(Query, conn))
        {

            conn.Open();
            GetAllcmd.Parameters.AddWithValue("@param", cbbEmployees.Text);


            //GetAllcmd.ExecuteScalar(); use GetAllcmd.ExecuteReader() instead
            OleDbDataReader oleDR;
                    oleDR = GetAllcmd.ExecuteReader();
                    if (oleDR.HasRows)
                    {
                         txtPayrollNo.Text = oleDR["PayrollNo"].ToString();
                         txtAHE.Text = oleDR["AnnualHolidayEntitlemet"].ToString();
                         txtDTTD.Text = oleDR["DaysTakenToDate"].ToString();
                         txtDaysRemaining.Text = (oleDR["AnnualHolidayEntitlemet"] - oleDR["DaysTakenToDate"]).ToString();

                    }


        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM