2013-11-27 38 views
1

這我的代碼進行結合我DataList和在數據列表每個項目有不同的按鈕, 項正確按日期排序,但每個項目的指標沒有它, 前整理: 當在僱員表中插入新數據時,數據顯示正確(按日期排序),最後一名員工插入到第一個項目的員工表中顯示,並採用索引0. 我想知道如何讓他的索引我的舊數據中的最後一個索引+1?添加到頂部在DataList控件

private void bind() 
{ 
    da2 = new SqlDataAdapter("select * from employees order by insert_date desc", m_SqlConnection); 
    DataSet dataSet2 = new DataSet(); 
    da2.Fill(dataSet2, "det"); 
    DataList1.DataSource = dataSet2.Tables["det"]; 
    DataList1.DataBind(); 

} 

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) 
{ 
    Button btn = (Button)e.Item.FindControl("button4"); 
    Button btn2 = (Button)e.Item.FindControl("button1"); 
    da2 = new SqlDataAdapter("select insert_stat from insert_detail where user_id='" + int.Parse(Session["id"].ToString()) + "'", m_SqlConnection); 
    DataSet dataSet2 = new DataSet(); 
    da2.Fill(dataSet2, "chk"); 
     if (dataSet2.Tables["chk"].Rows[e.Item.ItemIndex]["insert_stat"].ToString() == "accept") 
     { 
      btn.Visible = true; 
      btn2.Visible = true; 
     } 
     else 
     { 
      if (dataSet2.Tables["chk"].Rows[e.Item.ItemIndex]["insert_stat"].ToString() == "reject") 
      { 
       btn.Visible = false; 
       btn2.Visible = false; 
      } 
     } 

} 

回答

0

這是一個SQL問題,而不是一個DataList問題。

我建議你重寫你的SQL在bind()方法做就insert_detail表的連接,以獲得acceptreject值出表,進入綁定數據的數據列表中設置。這樣做有兩個好處:

  1. 它消除了DataList1_ItemDataBound()方法的數據庫調用,如果你有數十或數百行,然後就是數十或數百個更小的數據庫調用。
  2. 它可以讓你把insert_stat值轉換爲HiddenField控制在DataList然後檢查值在DataList1_ItemDataBound事件,像這樣:

    HiddenField theHiddenField = e.Item.FindControl("HiddenField1") as HiddenField; 
    
    // Make sure we found the control, because the as operator 
    // returns null for a failed cast 
    if(theHiddenField != null) 
    { 
        if(theHiddenField.Value.ToLower() == "accept") 
        { 
         btn.Visible = true; 
         btn2.Visible = true; 
        } 
        else 
        { 
         btn.Visible = false; 
         btn2.Visible = false; 
        } 
    }