Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套数据列表的问题_C#_Asp.net_Visual Studio 2010_Datalist_Nested Datalist - Fatal编程技术网

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();
}