2016-12-02 21 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