Hi, I am trying to build a 3-lvl accordion bootstrap and bind data to Datalist with
<asp:DataList ID="DataList1" runat="server" Style="width: 100%" OnItemCommand="DataList1_ItemCommand" DataKeyField="IdOB">
<ItemTemplate>
<div class="accordion" id="accordionExample">
<div class="card">
<div class="card-header" id="headingOne">
<h2 class="mb-0">
<asp:TextBox ID="txtIDOB" class="hidden" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"IdOB")%>' />
<asp:LinkButton ID="LinkButton10" runat="server" Text='<%#Eval("Obiectiv")%>' CommandName="Obiectiv" UseSubmitBehavior="false" Style="font-size: 11px;" class="form-control form-control-sm" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne" />
</h2>
</div>
<div id="collapseOne" class="collapse show" aria-labelledby="headingOne" data-parent="#accordionExample">
<asp:DataList ID="DataList2" runat="server" Style="width: 100%" OnItemCommand="DataList2_ItemCommand" DataKeyField="IdCL">
<ItemTemplate>
<div class="card-body">
<asp:TextBox ID="txtIDCL" class="hidden" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"IdCL")%>' />
<asp:LinkButton ID="LinkButton11" runat="server" Text='<%#Eval("Cladire")%>' CommandName="Cladire" UseSubmitBehavior="false" Style="font-size: 11px;" class="form-control form-control-sm" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="true" aria-controls="collapseTwo" />
</div>
</ItemTemplate>
</asp:DataList>
</div>
<div id="collapseTwo" class="collapse show" aria-labelledby="collapseOne" data-parent="#accordionExample">
<asp:DataList ID="DataList3" runat="server" Style="width: 100%" OnItemCommand="DataList3_ItemCommand" DataKeyField="IdCA">
<ItemTemplate>
<div class="card-body">
<asp:TextBox ID="txtIDCA" class="hidden" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"IdCA")%>' />
<asp:LinkButton ID="LinkButton11" runat="server" Text='<%#Eval("Camera")%>' CommandName="Camera" UseSubmitBehavior="false" Style="font-size: 11px;" class="form-control form-control-sm" data-toggle="collapse" data-target="#collapseThree" aria-expanded="true" aria-controls="collapseThree" />
</div>
</ItemTemplate>
</asp:DataList>
</div>
</div>
</ItemTemplate>
</asp:DataList>
Code behind
protected void GetData()
{
using (SqlConnection conn = new SqlConnection(connString))
{
string sqlQuery = "SELECT DISTINCT IdOB,Obiectiv FROM tblObiectiv ORDER BY Obiectiv";
using (SqlCommand cmd = new SqlCommand(sqlQuery, conn))
{
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
conn.Open();
DataSet ds = new DataSet();
da.Fill(ds);
DataList1.DataSource = ds.Tables[0];
DataList1.DataBind();
conn.Close();
}
}
}
private static DataTable GetDataTable(string query)
{
string constr = ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
using (SqlConnection conn = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = query;
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = conn;
sda.SelectCommand = cmd;
using (DataSet ds = new DataSet())
{
DataTable dt = new DataTable();
sda.Fill(dt);
return dt;
}
}
}
}
}
protected void DataList1_ItemCommand(Object source, DataListCommandEventArgs e)
{
if (e.CommandName == "Obiectiv" && e.Item.ItemType == ListItemType.Item)
{
int idob = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex].ToString());
DataRowView drv = e.Item.DataItem as DataRowView;
DataList innerDataList = e.Item.FindControl("DataList2") as DataList;
innerDataList.DataSource = GetDataTable("SELECT DISTINCT IdCL,Cladire FROM tblCladire WHERE IdOB ='" + idob + "'");
innerDataList.DataBind();
}
}
protected void DataList2_ItemCommand(Object source, DataListCommandEventArgs e)
{
if (e.CommandName == "Cladire" && e.Item.ItemType == ListItemType.Item)
{
DataRowView drv = e.Item.DataItem as DataRowView;
DataList secondDataList = e.Item.FindControl("DataList2") as DataList;
int idcl = Convert.ToInt32(secondDataList.DataKeys[e.Item.ItemIndex].ToString());
secondDataList.DataSource = GetDataTable("SELECT DISTINCT IdCA,Camera FROM tblCladire WHERE IdCL ='" + idcl + "'");
secondDataList.DataBind();
}
}
but I only get data for "Obiectiv" but not the other lvls. No error also, how it should be done?