2016-12-02 55 views
0

背景信息按鈕和ItemCommand事件序列

  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(); 
     } 
    } 
} 
  • 抓住work_order列的文字,我使用的itemcommand事件傳播的標籤(​​)。
  • 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; 
    } 
    
  • 這種運作良好,每次btn_Start被推動時,​​與正確的信息更新。
  • 問題:當點擊btn_Start,既btn_StartDataList1_ItemCommand火災。但DataList1_ItemCommand火災btn_Start。這意味着​​未更新正確的信息,因此插入無法按需要工作。

    注意:不需要

    1. 的​​,我打算去直接到SQL插入。​​用於代碼測試(這樣我就可以看到這是怎麼回事)

    2. 目標是從數據列表(Work_OrderLabel4)與抓起數據做SQL插入。如果我能夠實現這個目標,那麼也可以解決這個問題。

    3. btn_Start不會是數據專家中唯一的按鈕。一個可能的解決方案是從兩個事件開始,只在itemcommand事件下做事,但是如何分離出哪個按鈕觸發,而不涉及它們各自的事件。

    目的:我試圖讓每個嵌入啓動按鈕,抓住它在SQL插入使用相應work_order值。以上是試圖完成這項任務,我幾乎在那裏,但我有上述問題。我打開其他的方式來完成這項任務(見澄清圖片)

    enter image description here

    附加信息:

    enter image description here

    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(); 
         } 
        } 
    } 
    

    運行 After Running

    +0

    不知道你在做什麼。爲什麼當點擊btn_Start時,兩者都被解僱?代碼中沒有顯示。 – CodingYoshi

    +0

    在DataGrid控件中單擊任何按鈕時會引發ItemCommand事件。代碼中沒有任何事情發生,它是itemcommand的一個函數。根據我的理解,這是必要的,所以我抓住正確的標籤值,如果我的datalist有多條記錄,我需要相應的按鈕點擊以獲取正確的工作訂單值。 – Itomship

    +0

    我在一個客觀的部分添加,以幫助澄清我想要做的事情。 – Itomship

    回答

    0

    獲取擺脫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表。

    +0

    該代碼是正確的,但它提出了「對象引用未設置爲對象的實例」。所有的名字都是正確的。 – Itomship

    +0

    我不明白你的評論:什麼代碼是正確的?你在哪裏得到那個異常? – CodingYoshi

    +0

    該代碼是正確的,它的名稱和功能的條款。但由於某種原因,它找不到Work_OrderLabel4「,但是如果我將這個函數賦值給一個按鈕,它可以工作 – Itomship