Frist your select command must be:
"SELECT chapterid AS ID, chaptername AS Name,
courseid + 1000 AS parentID FROM OpenCoursesChapters p
UNION ALL
SELECT courseid + 1000 AS ID, coursename AS Name, null AS parentID
FROM Opencourses"
Unless you can use asp TreeView like this :
<asp:TreeView ID="RadPanelBar1"
runat="server"
ShowCheckBoxes="All"
PopulateNodesFromClient="False"
onclick="client_OnTreeNodeChecked();" >
</asp:TreeView>
and in java script (may in footer) use this function for auto check child nodes:
function client_OnTreeNodeChecked(evt)
{
var obj;
if(window.event) obj = window.event.srcElement;
else obj = (evt ? evt : (window.event ? window.event : null)).target;
var treeNodeFound = false;
var checkedState;
if (obj.tagName == "INPUT" && obj.type == "checkbox" )
{
checkedState = obj.checked;
do
{
obj = obj.parentNode;
}
while (obj.tagName != "TABLE")
var parentTreeLevel = obj.rows[0].cells.length;
//get the current node's parent node.
var tables = obj.parentNode.getElementsByTagName("TABLE");
var numTables = tables.length;
if (numTables >= 1)
{
for (i=0; i < numTables; i++)
{
if (tables[i] == obj)
{
treeNodeFound = true;
i++;
if (i == numTables) return;
}
if (treeNodeFound == true){
var childTreeLevel = tables[i].rows[0].cells.length;
if (childTreeLevel > parentTreeLevel){
var cell = tables[i].rows[0].cells[childTreeLevel - 1];
var inputs = cell.getElementsByTagName("INPUT");
inputs[0].checked = checkedState;
}
else return;
}
}
}
}
}
so , in page_load() server side code behind call this function:
public void tree_fill_general(TreeView tree_name, string parent_query, string child_query)
{
try
{
if (your connection == false)
{
your connection.Open();
}
tree_name.Nodes.Clear();
string q = parent_query;
SqlDataAdapter sda = new SqlDataAdapter(q, your connection);
DataSet datasetParent = new DataSet();
sda.Fill(datasetParent);
for (int i = 0; i <= datasetParent.Tables[0].Rows.Count - 1; i++)
{
TreeNode main = new TreeNode();
main.Text = datasetParent.Tables[0].Rows[i]["name"].ToString();
main.Value = datasetParent.Tables[0].Rows[i]["code"].ToString();
string q1 = child_query + main.Value;
SqlDataAdapter sda1 = new SqlDataAdapter(q1, your connection);
DataSet datasetChild = new DataSet();
sda1.Fill(datasetChild);
for (int j = 0; j <= datasetChild.Tables[0].Rows.Count - 1; j++)
{
TreeNode mainchild = new TreeNode();
mainchild.Text = datasetChild.Tables[0].Rows[j]["name"].ToString();
mainchild.Value = datasetChild.Tables[0].Rows[j]["code"].ToString();
main.ChildNodes.Add(mainchild);
}
tree_name.Nodes.Add(main);
}
}
catch (Exception eee)
{
Utility.SetMessage(Page, "error", eee.Message, enumIcon.Error);
}
}
and parent_query :
"select courseid as code,coursename as name from Opencourses order by sec,courseid";
final , child_query :
"select chapterid as code,chaptername as name opencourseschapters where courseid =";