By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
463,162 Members | 696 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 463,162 IT Pros & Developers. It's quick & easy.

Dynamic TreeView selection binding to DetailsView using sqlDataSource in ASP.NET 2.0

P: 1
Hi Experts,

Please help, I am a newbie to ASP.NET 2.0 may be I am doing something wrong or there may be a bug somewhere.

Basically I have a TreeView Control which I have created programmatically. And I want to bind the selection of a TreeNode (which is a record) from the database) to a DetailsView which shows the datatable record for the selected TreeView node in the Details View.

I am using IDE : Visual Web Developer 2005 Express; OS= Windows XP Professional;
Language used VB.NET; Database being used MySQL Server 5.0, for my database, using MySQL Connector/ODBC 3.51 and also installed MYSQL Connector/Net

The TreeView appears to work when
'Declared the variable below
<script runat=server>
Public TreeNodeValue As String

[TreeView Code goes here, can be provided if requested]
' left out for clarity...

'Event Handler code to display TreeViewNode selection
Expand|Select|Wrap|Line Numbers
  1. Protected Sub TreeViewCommondata_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs)
  2. TreeNodeValue = TreeViewCommondata.SelectedNode.Value
  3. Response.Write("You selected TreeViewNode value : " & _TreeViewCommondata.SelectedNode.Value)
  4. End Sub

When at run time, when the TreeNode is selected the above Response.Write renders to the webpage with the selected TreeView control and displays the String for the TreeNode selected.

Now I want to bind the selected TreeView node to a DetailsView so I basically draggged SqlDatasource to webpage containing TreeViewcontrol and also dragged the DetalisView on this webpage. Configured the datasource for SQLDatasource to my MySQL database)

Also the markup is as follows:
Expand|Select|Wrap|Line Numbers
  1. <body>
  2. <form id="form1" runat="server">
  3. <div> 
  4. <!-- The TreeView control associates the OnTreeNodePopulate method with an event handler named_
  5. Node_Populate --> 
  6. &nbsp;<asp:TreeView Runat="Server" ExpandImageUrl="Images/closed.gif" CollapseImageUrl="Images/open.gif" OnTreeNodePopulate="Node_Populate" ID="TreeViewCommondata" ImageSet="Simple" ShowLines="True" NodeWrap="True" Width="260px" OnSelectedNodeChanged="TreeViewCommondata_SelectedNodeChanged" OnDataBinding="TreeViewCommondata_SelectedNodeChanged" OnDataBound="TreeViewCommondata_SelectedNodeChanged">
  7. <Nodes>
  8. <asp:TreeNode Text="Common data" PopulateOnDemand=True Value="0" >
  9. </asp:TreeNode>
  10. </Nodes>
  11. <ParentNodeStyle Font-Bold="False" />
  12. <HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" />
  13. <SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" HorizontalPadding="0px"
  14. VerticalPadding="0px" />
  15. <NodeStyle Font-Names="Tahoma" Font-Size="10pt" ForeColor="Black" HorizontalPadding="0px"
  16. NodeSpacing="0px" VerticalPadding="0px" />
  17. </asp:TreeView>
  18. &nbsp;&nbsp;
  19. </div>
  20. <asp:DetailsView ID="DetailsView1" runat="server" AllowPaging="True" BackColor="#CCCCCC"
  21. BorderColor="#999999" BorderStyle="Solid" BorderWidth="3px" CellPadding="4" CellSpacing="2"
  22. DataSourceID="SqlDataSource1" ForeColor="Black" Height="50px" Width="700px" style="left: 309px; position: absolute; top: 34px">
  23. <FooterStyle BackColor="#CCCCCC" />
  24. <EditRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
  25. <RowStyle BackColor="White" />
  26. <PagerStyle BackColor="#CCCCCC" ForeColor="Black" HorizontalAlign="Left" />
  27. <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
  28. </asp:DetailsView>
  29. <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:bier_compact_test5ConnectionString %>"
  30. ProviderName="<%$ ConnectionStrings:bier_compact_test5ConnectionString.ProviderName %>" SelectCommand="SELECT * FROM commondata WHERE Name=?TreeNodeValue">
  31. <SelectParameters>
  32. <asp:ControlParameter ControlID="TreeViewCommondata" Name="Name" PropertyName="SelectedValue"
  33. Type="String" />
  34. </SelectParameters>
  35. </asp:SqlDataSource>
  36. </form>
  37. </body>
When I run the page I get the TreeView control on the webpage, however when I select a node I get the error:-
"ERROR [42000] [MySQL][ODBC 3.51 Driver][mysqld-5.0.37-community-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TreeNodeValue' at line 1"

However, if I hard code the mark-up and replace the ?TreeNodeValue with 'Field name' from the MySQL table a DetailsView is displayed albeit fixed to that field.

I have seen previous example s on the Internet using SQL Server which uses @ as the placeholder and assumed it would be a matter of using ? for MySQL.

Maybe it's a postback thing I am not understanding, or is it a page life-cycle issue?
I have seen on some forums that this maybe a bug with MySQL connector regarding passing value parameters. However, I just do not have the knowledge at the moment for a workaround. Maybe using the ObjectDataSource object? I donít know?

Maybe doing some not correct of missing something, probably straight forward for a experienced developers.

Any examples, pointers and help/guidance would be deeply appreciated.


Nov 1 '07 #1
Share this Question
Share on Google+
2 Replies

Expert 2.5K+
P: 3,405
Hi Martin,

Your question has been moved to the .NET Forum as it is not an appropriate question for the ASP Forum as per the Posting Guidelines.
The ASP Forum is for classic ASP and VBScript questions and answers, .NET and it's related components/languages are discussed in this forum.

Nov 2 '07 #2

Expert 2.5K+
P: 4,871
Suggest searching the site first to see if you an answer, we get many posts about treeviews.
Nov 2 '07 #3

Post your reply

Sign in to post your reply or Sign up for a free account.