C# 嵌套数据列表的问题
我在C# 嵌套数据列表的问题,c#,asp.net,visual-studio-2010,datalist,nested-datalist,C#,Asp.net,Visual Studio 2010,Datalist,Nested Datalist,我在DataList1内部有一个嵌套的DataList结构DataList2,其中我在DataList2内部有两个执行特定命令的按钮,我想调用一个过程,将DataList1的datakeyfield和DataList2的datakeyfield作为输入,但是读取DataList2的datakeyfield有问题,下面是我的代码: .aspx.cs代码 protected void DataList2_ItemCommand(object source, DataListCommandEventA
DataList1
内部有一个嵌套的DataList结构DataList2
,其中我在DataList2
内部有两个执行特定命令的按钮,我想调用一个过程,将DataList1的datakeyfield
和DataList2的datakeyfield
作为输入,但是读取DataList2的datakeyfield
有问题,下面是我的代码:
.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();
}
错误:
当前上下文中不存在名称“DataList2”
假设您的数据在DataList1中生成多行,则有多个DataList2。因此,ASP.NET不会使DataList2成为page(codebehind)类的成员
幸运的是,在本例中,发送方(您称之为source,同样的东西)应该是您想要的DataList2。尝试将其转换为数据列表,看看会发生什么。您犯了几个错误。第一个DataList2
无法直接访问(正如您所注意到的)。其次,对父数据列表和子数据列表使用相同的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();
}