This is a migrated thread and some comments may be shown as answers.

Using RadMenu with SQL Database

6 Answers 303 Views
Menu
This is a migrated thread and some comments may be shown as answers.
lantram
Top achievements
Rank 1
lantram asked on 06 Nov 2009, 12:01 AM
Hello, I'm a customer of and am using "RadControls for ASPNET AJAX Q1 2008", specifically the RadMenu control, and am attempting to bind it to a Microsoft SQL database table. I have the following table defined (simplified):

tblPages
[Column Name], [Data Type], [Allow Nulls]
PageID, int, false -- (an identity field)
PageParentID, int, true
PageTitle, varchar(50), true
PageContent, text, true

In an ASCX, I have the following,

<telerik:RadMenu
  ID="NavMenu"
  runat="server"
  DataSourceID="NavigationSqlDataSource"
  Width="100%"
  DataFieldID="PageID"
  DataFieldParentID="PageParentID"
  DataTextField="PageTitle">  
  <CollapseAnimation Duration="200" Type="OutQuint" /> 
</telerik:RadMenu> 
<asp:SqlDataSource  
  ID="NavigationSqlDataSource" 
  runat="server" 
  ConnectionString="[OMITTED]" 
  SelectCommand="SELECT * FROM [tblPages]">  
</asp:SqlDataSource> 

I don't have any problems with the menu displaying, however, what I'm unclear about, is how to take the "PageID" from the database above and simply have the RadMenu take a click and go to something like:

~/page.aspx?id=[PAGEID]

Where [PAGEID], would of course, be an integer that could be looked up (if necissary, using my own code), which would allow me to display the content.

I just want a click on the menu to go to something like "~/page.aspx?id=[PAGEID]". Is there an event or something where I can set this to happen? Is there something built into the control (realize, I'm using the Q1 2008 version)?

Thanks for any assistance or help or even ideas you can supply.

6 Answers, 1 is accepted

Sort by
0
lantram
Top achievements
Rank 1
answered on 06 Nov 2009, 07:28 AM
Okay, no response from Telerik or anyone else yet, and perhaps I'm really dense in regards to data binding... but since the control does not have the NavigateUrl format whatever thing (which I assume would resolve this entire issue), I'm attempting to do it like this ...

Here is my code:
protected void NavMenu_ItemClick(object sender, Telerik.Web.UI.RadMenuEventArgs e)     
{     
    DataRowView dataRow = (DataRowView)e.Item.DataItem;     
    
    // doesn't work: "Object reference not set to an instance of an object"     
    Int32 PageID = Convert.ToInt32(dataRow["PageID"]);      
    
    // and this won't work, due to the above     
    e.Item.NavigateUrl = ResolveUrl( String.Format( "~/page.aspx?id={0}", PageID ) );   
}    

As previously mentioned, the menu renders just fine using the SQL server table I explained above. It's the clicks that I want to direct.

I suppose if I can't get a response, then I'll end up having to pull the data out of SQL server and manually/dynamically build the entire menu control in a page load ... which I really hate to do, since there has to be an easier way. Some help, please.
0
lantram
Top achievements
Rank 1
answered on 06 Nov 2009, 09:52 AM
Still no response, but trying this doesn't work either ...

protected void NavMenu_ItemClick(object sender, Telerik.Web.UI.RadMenuEventArgs e)  
{  
    // won't work, end up with 0 instead of the PageID value  
    Int32 PageID = Convert.ToInt32( e.Item.Attributes["PageID"] );  
 
    // which causes this to fail  
    e.Item.NavigateUrl = ResolveUrl( String.Format("~/page.aspx?id={0}", PageID) );  

Normally I don't design mode bind to database tables, but since it is built in ... trying to figure out how. The menu renders perfectly ... except (repeating myself) I need to dynamically link menu items to a page ... which should be pretty apparent from my above code example. I expect I'm being stupid and am missing something extremely simple. Can anyone please help?
0
Accepted
Atanas Korchev
Telerik team
answered on 06 Nov 2009, 12:09 PM
Hi Larry Antram,

You can try the following:

protected void NavMenu_ItemDataBound(object sender, Telerik.Web.UI.RadMenuEventArgs e)  
{  
    int pageId = (int)DataBinder.Eval(e.Item.DataItem, "PageID");
    e.Item.NavigateUrl = ResolveUrl( String.Format("~/page.aspx?id={0}", PageID) );  
}

This should be the event handler of the ItemDataBound event of RadMenu. Also make sure you are not using the ItemClick event. ItemClick does not work when NavigateUrl of the item is set.

If for some reason you need to handle ItemClick you can use a different approach:

  1. Bind Value property to the PageID field by setting the DataValueField property of RadMenu to "PageID"
  2. During the ItemClick event handler use the Value property of the clicked item to obtain the associated PageID and then do Response.Redirect
Regards,
Albert,
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
lantram
Top achievements
Rank 1
answered on 06 Nov 2009, 10:10 PM
Thank you! I'm sorry for being such a bonehead, your suggestion works just fine, exactly what I was looking for. Very much appreciated.

protected void NavMenu_ItemDataBound(object sender, Telerik.Web.UI.RadMenuEventArgs e)  
{  
    Int32 PageID = Convert.ToInt32( DataBinder.Eval(e.Item.DataItem, "PageID") );  
    e.Item.NavigateUrl = ResolveUrl( String.Format("~/page.aspx?id={0}", PageID) );  
0
razi
Top achievements
Rank 1
answered on 04 Jan 2012, 09:47 AM

Hi.
I use a radmenu & bind it to a table as fallow

TblPages
pg_ID int
pg_ParentID int (alow null)
pg_Title nvarchar(100)

it's my radmenu:

 

<telerik:RadMenu ID="RadMenu1" runat="server" DataFieldID="pg_ID" DataFieldParentID="pg_ParentID"

 DataSourceID="sds_Menu" DataTextField="pg_Title" EnableRoundedCorners="True"

 EnableShadows="True" Flow="Vertical" OnItemClick="RadMenu1_ItemClick" OnItemDataBound="RadMenu1_ItemDataBound"

Skin="Windows7" Width="180px" Style="top: 0px; right: 0px"

 DataValueField="pg_ID">

 <CollapseAnimation Duration="200" Type="OutQuint" />

 </telerik:RadMenu>

  

<asp:SqlDataSource ID="sds_Menu" runat="server" ConnectionString="<%$ ConnectionStrings:AerobicConnectionString %>"

 SelectCommand="SELECT pg_ID, pg_ParentID, pg_Title, pg_Value, pg_Order FROM Pages ORDER BY pg_Order">

 </asp:SqlDataSource>

 and it is codebehind:

protected void RadMenu1_ItemDataBound(object sender, Telerik.Web.UI.RadMenuEventArgs e)

 {

 int pageId = (int)DataBinder.Eval(e.Item.DataItem, "pg_ID");

 e.Item.NavigateUrl = ResolveUrl(String.Format("~/page.aspx?id={0}", pageId));
}

  

protected void RadMenu1_ItemClick(object sender, Telerik.Web.UI.RadMenuEventArgs e)

 {

 

DataRowView dataRow = (DataRowView)e.Item.DataItem;

 Int32 PageID = Convert.ToInt32(dataRow["pg_ID"]);

e.Item.NavigateUrl = ResolveUrl(String.Format("~/page.aspx?id={0}", PageID));  

 

it work property.
Now,I want to do this:when click a menu whitout opening a new window show Content of that page in current page.
could u help me?


sorry for my bad writing

Thanks alot.

0
Richard
Top achievements
Rank 1
answered on 04 Jan 2012, 04:21 PM
Razi:

I am having some difficulty understanding your requirement. Are you trying to set the "target" property of the "NavigateUrl" property of the RadMenuItem to "Same Window"? It does not look like this is possible with the RadMenuItem API.

There is a "Target=" property for a RadMenuItem that can be set at design time. Would this help?
<telerik:RadMenuItem runat="server" Height="50px" ImageUrl="~/images/help_button.jpg"
    Target="_self" NavigateUrl="http://www.telerik.com" Width="150px" >
</telerik:RadMenuItem>

Would you consider using a RadPageView or RadWindow embedded in the page as an alternative?

Please clarify.
Tags
Menu
Asked by
lantram
Top achievements
Rank 1
Answers by
lantram
Top achievements
Rank 1
Atanas Korchev
Telerik team
razi
Top achievements
Rank 1
Richard
Top achievements
Rank 1
Share this question
or