1

I want to display data from two tables named "OpenCourses" and "OpenCoursesChapters".

Opencourses table:

enter image description here

OpenCoursesChapters table:

enter image description here

I want to show coursename on radtreeview as parent node and chaptername as child node:

 <div class="demo-container size-thin">

    <telerik:RadTreeView Height="300px" runat="server" ID="RadPanelBar1" DataTextField="name" DataFieldID="id"
     DataFieldParentID="parentid" DataSourceID="SqlDataSource1" >

    </telerik:RadTreeView>
</div>

   <asp:SqlDataSource runat="server" ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:ConStr %>"
    ProviderName="System.Data.SqlClient" SelectCommand="SELECT courseid as id, NULL as parentid, coursename as name from opencourses union select chapterid as id, courseid as parentid, chaptername as name from opencourseschapters"></asp:SqlDataSource>

On running the project i am getting the error

These columns don't currently have unique values.

Any ideas?

jarlh
  • 42,561
  • 8
  • 45
  • 63

1 Answers1

0

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  =";