2011-12-31 75 views
2

我有內部DataList1嵌套的DataList結構DataList2其中我有2 Buttons內部DataList2執行某些命令,我​​想以調用作爲輸入的DataList1datakeyfieldDataList2datakeyfield的過程,但有是閱讀的DataList2datakeyfield一個問題,這裏是我的代碼:問題嵌套數據列表

.aspx.cs代碼

protected void DataList2_ItemCommand(object source, DataListCommandEventArgs e) 
{ 
    if ((e.CommandName == "accept") && (e.CommandArgument != null)) 
    { 
     string connStr = ConfigurationManager.ConnectionStrings["MyDbConn"].ToString(); 
     SqlConnection conn = new SqlConnection(connStr); 
     int team_ID = (int)DataList1.DataKeys[e.Item.ItemIndex]; 
     SqlCommand cmd = new SqlCommand("accept_member", conn); 
     string member = (string)DataList2.DataKeys[e.Item.ItemIndex]; 
     cmd.CommandType = CommandType.StoredProcedure; 
     string email = Session["email"].ToString(); 
     int course_ID = Convert.ToInt32(Request.QueryString["courseID"]); 
     cmd.Parameters.Add(new SqlParameter("@course_ID", course_ID)); 
     cmd.Parameters.Add(new SqlParameter("@team_ID", team_ID)); 
     cmd.Parameters.Add(new SqlParameter("@myemail", email)); 
     cmd.Parameters.Add(new SqlParameter("@member", member)); 
     cmd.Parameters.Add(new SqlParameter("@respond", 1)); 
     SqlParameter count = cmd.Parameters.Add("@count", SqlDbType.Int); 
     count.Direction = ParameterDirection.Output; 

     conn.Open(); 
     cmd.ExecuteNonQuery(); 

     if (@count.Value.ToString().Equals("1")) 
     { 
      Response.Write(@member + " " + "joined your team"); 

     } 
     else 
     { 
      Response.Write("team is full or not found"); 
     } 
    } 
    else if ((e.CommandName == "reject") && (e.CommandArgument != null)) 
    { 
     int team_ID = (int)DataList1.DataKeys[e.Item.ItemIndex]; 
     string connStr = ConfigurationManager.ConnectionStrings["MyDbConn"].ToString(); 
     SqlConnection conn = new SqlConnection(connStr); 
     string member = (string)DataList2.DataKeys[e.Item.ItemIndex]; 
     SqlCommand cmd = new SqlCommand("accept_member", conn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     string email = Session["email"].ToString(); 
     int course_ID = Convert.ToInt32(Request.QueryString["courseID"]); 
     cmd.Parameters.Add(new SqlParameter("@course_ID", course_ID)); 
     cmd.Parameters.Add(new SqlParameter("@team_ID", team_ID)); 
     cmd.Parameters.Add(new SqlParameter("@myemail", email)); 
     cmd.Parameters.Add(new SqlParameter("@member", member)); 
     cmd.Parameters.Add(new SqlParameter("@respond", "0")); 
     SqlParameter count = cmd.Parameters.Add("@count", SqlDbType.Int); 
     count.Direction = ParameterDirection.Output; 

     conn.Open(); 
     cmd.ExecuteNonQuery(); 

     if (@count.Value.ToString().Equals("1")) 
     { 
      Response.Write(@member + " " + "has been rejected"); 
     } 
     else 
     { 
      Response.Write("team is full or not found"); 
     } 
    } 

    DataList2.DataBind(); 
} 

錯誤:

The name "DataList2" does not exist in the current context

回答

0

假設你的數據在DataList1生產超過一排,有不止一個DataList2。因此,ASP.NET不會使DataList2成爲頁面(代碼隱藏)類的成員。

幸運的是,在這種情況下,發件人(您稱爲源,同樣的東西)應該是你想要的DataList2。嘗試將其轉換爲DataList並查看會發生什麼。

1

你犯了一些錯誤。第一個DataList2不能直接訪問(正如你已經注意到的)。其次,您對父級和子級DataList使用相同的ItemIndex。但是由於它們是嵌套的,它們不具有相同的值,但需要由不同的數組索引訪問。

protected void DataList2_ItemCommand(object source, DataListCommandEventArgs e) 
{ 
    //cast the source back to a the datalist 
    DataList datalist2 = source as DataList; 

    //get the value from the nested datalist 
    string childValue = (string)datalist2.DataKeys[e.Item.ItemIndex]; 

    //get the parent object of datalist2 
    DataListItem dli = datalist2.NamingContainer as DataListItem; 

    //get the value from the parent datalist using the itemindex of the parent, not the child 
    int parentValue = (int)DataList1.DataKeys[dli.ItemIndex]; 

    //show results 
    Label1.Text = parentValue + " - " + childValue; 

    //rebind datalist2 
    datalist2.DataBind(); 
}