2013-11-27 7 views
1

Этого мой кода для связывания Моего DataList, и каждый элемент в DataList имеет другую кнопку, элементов правильно отсортированы по дате, но индекс для каждого элемента не сортируются с ним, например: при вставке новых данных в таблицу сотрудников данные отображаются правильно (отсортировано по дате), последний сотрудник был вставлен в таблицу сотрудников, показывает в первом элементе и принимает индекс 0. Я хочу знать, как я могу сделать свой индекс. Последний индекс в моих старых данных + 1?Добавить в Top в 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(), чтобы сделать JOIN на insert_detail столе, чтобы получить значение accept или reject из таблицы и в связанных наборов данных для списка данных. Это служит два преимущества:

  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; 
        } 
    } 
    
Смежные вопросы