簡體   English   中英

按鈕和itemcommand事件序列

[英]button and itemcommand event sequence

背景資料

  1. 我有一個SQL連接的數據列表,其中一列稱為work_order
  2. 在數據列表中,我插入了一個按鈕btn_Start 該按鈕填充在每個集合的末尾
  3. btn_Start的目標是執行數據庫插入,該插入需要包括單擊按鈕的數據集中的work_order值(因此,插入可以綁定到work_order值。)

btn_Start碼:

protected void btn_Start(object sender, EventArgs e)
{
    using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["nothanks"].ConnectionString))
    {
        String query = "INSERT INTO [TimeTest] ([Starttime], [Work_Order]) VALUES (@Starttime, @Work_Order)";

        using (SqlCommand CCC = new SqlCommand(query, connection))
        {
            connection.Open();
            CCC.CommandType = CommandType.Text;

            CCC.Parameters.Add("@Starttime", SqlDbType.DateTime).Value = DateTime.Now;
            CCC.Parameters.Add("@Work_Order", SqlDbType.Int).Value = lb_User1.Text.ToString();

            CCC.ExecuteNonQuery();
        }
    }
}
  1. 為了獲取work_order列的文本,我正在使用itemcommand事件來傳播標簽( lb_User1 )。

DataList1_ItemCommand`代碼:

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
        DataList2.SelectedIndex = e.Item.ItemIndex;
        lb_User1.Text = (DataList2.SelectedItem.FindControl("Work_OrderLabel4") as Label).Text;
}
  1. 這種運作良好,每次btn_Start推, lb_User1用正確的信息更新。

問題 :當btn_Start被點擊時,既btn_StartDataList1_ItemCommand火災。 但是DataList1_ItemCommand btn_Start 之后 btn_Start 這意味着lb_User1尚未使用正確的信息更新,因此插入無法按需工作。

筆記:

  1. lb_User1 ,我計划直接轉到SQL插入。 lb_User1用於代碼測試(因此我可以看到發生了什么)

  2. 我的目標是使用從數據列表( Work_OrderLabel4 )中獲取的數據進行SQL插入。 如果我可以實現這個目標的更好的方法,也可以解決問題。

  3. btn_Start不會成為數據列表中的唯一按鈕。 一種可能的解決方案是從具有兩個事件並且僅在itemcommand事件下執行操作itemcommand ,但是如何在不涉及其各自事件的情況下分離出哪個按鈕觸發。

目標 :我正在嘗試獲取每個嵌入式開始按鈕,以獲取其相應的work_order值,以供在SQL插入中使用。 以上是試圖完成此任務的過程,我已經差不多了,但是遇到了上述問題。 我願意接受其他方式來完成此任務(請參見說明圖片)

在此處輸入圖片說明

附加信息:

在此處輸入圖片說明

 protected void DL_Main_ItemCommand(object source, DataListCommandEventArgs e)
{
    using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["test"].ConnectionString))
    {
        String query = "INSERT INTO [TimeTest] ([Starttime], [Work_Order]) VALUES (@Starttime, @Work_Order)";

        using (SqlCommand CCC = new SqlCommand(query, connection))
        {
            connection.Open();
            CCC.CommandType = CommandType.Text;
            CCC.Parameters.Add("@Starttime", SqlDbType.DateTime).Value = DateTime.Now;
         // All you need is the value of Work_OrderLabel4 of the selected item so just do it like this. 
            CCC.Parameters.Add("@Work_Order", SqlDbType.Int).Value = (DL_Main.SelectedItem.FindControl("Work_OrderLabel") as Label).Text;


            CCC.ExecuteNonQuery();
        }
    }
}

跑步后 跑步后

擺脫btnStart並將下面的代碼放入DataList1_ItemCommand 我更改的唯一一行是帶有我的評論的一行:

using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["nothanks"].ConnectionString))
{
    String query = "INSERT INTO [TimeTest] ([Starttime], [Work_Order]) VALUES (@Starttime, @Work_Order)";

    using (SqlCommand CCC = new SqlCommand(query, connection))
    {
        connection.Open();
        CCC.CommandType = CommandType.Text;

        CCC.Parameters.Add("@Starttime", SqlDbType.DateTime).Value = DateTime.Now;

        // All you need is the value of Work_OrderLabel4 of the selected item so just do it like this. 
        CCC.Parameters.Add("@Work_Order", SqlDbType.Int).Value = (DataList2.SelectedItem.FindControl("Work_OrderLabel4") as Label).Text;
    }

    CCC.ExecuteNonQuery();
    }
}

另外,請注意,為控件提供比DataList1更好的名稱。 也許是DataListTimeTest,因為它處理TimeTest表。

暫無
暫無

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

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