Solved

How to assign a variable to the DataNavigateUrlFormatString property of a hyperlinkcolumn in a datagrid.

Posted on 2004-10-05
8
2,147 Views
Last Modified: 2007-12-19
I have a vb.net aspx page which allows the user to make certain selections.  The value of the selections is stored in a variable called strPath.

I need to somehow get this variable into DataNavigateUrlFormatString.

I have the following code so far

[code]<%@ Page Language="VB" Debug=true explicit="true" aspcompat=true  %>
<%@ Import Namespace="System.IO" %>

<script language="VB" runat="server">

      Dim strPath As String = "mainfolder"
      Dim strOldPath As String

      Sub Page_Load(sender as Object, e as EventArgs)
            if not Page.IsPostBack then
                  '## GETTING A MAP OF THE DIRECTORY AND SAVING IT IN A ARRAY
                  dim oDir as DirectoryInfo = new DirectoryInfo(Server.Mappath(strPath))
                  dim aList as Array = oDir.GetDirectories()

                  '## BINDING THE DIRECTORY TO THE DROPDOWNLIST AND ADDING AND MAIN
                  '## DIRECTORY TO THE TOP OF THE LIST
                  ddlSubFolders.Datasource = aList
                  ddlSubFolders.DataBind()
                  ddlSubFolders.Items.Insert(0, strPath)

                  '## BINDING THE MAIN DIRECTORY TO THE DATAGRID
                  dgFileList.DataSource = oDir.GetFiles()
                  dgFileList.DataBind()
                  
                  lblDocCount.text = "<font color=#4B92D9>" & dgFileList.items.count & "</font> document(s) found"
            end if
      End Sub
      
      '## CHANGES THE DIRECTORY BASED ON THE SELECTED DROPDOWNLIST ITEM
      Sub FolderChange(sender as Object, e as EventArgs)
            '## CHECKS TO SEE IF THE FIRST LISTITEM IS SELECTED OR NOT
            if ddlSubFolders.SelectedIndex = 0 then
                  strOldPath = strPath
            Else
                  strOldPath = strPath & "/"
                  strOldPath = strOldPath & ddlSubFolders.SelectedItem.Text
            End If
            
            '## REBINDS THE PAGES WITH THE NEW DIRECTORY INFORMATION
            dim oDir as DirectoryInfo = new DirectoryInfo(Server.Mappath(strOldPath))
            dgFileList.DataSource = oDir.GetFiles()
            dgFileList.DataBind()
            
            lblDocCount.text = "<font color=#4B92D9>" & dgFileList.items.count & "</font> document(s) found"
      End Sub
</script>

<html>
      <head>
            <title>Page Title</title>
      </head>
      <body>
            <form id="form1" method="Post" runat="server">
                  <asp:Label
                                    id="page_title"
                                    Font-Size="11"
                                    Font-Name="Arial"
                                    Font-Bold="true"
                                    ForeColor="#00436c"
                                    text=""
                                    runat="server" /><br />
                                    
                  <asp:dropdownlist
                                    id="ddlSubFolders"
                                    Font-Name="Arial"
                                    font-size="8"
                                    runat="server"
                                    OnSelectedIndexChanged="FolderChange"
                                    autopostback="true" /><p />
                                    
                  <asp:DataGrid
                                    id="dgFileList"
                                    runat="server"
                                    gridlines="none"
                                    AutoGenerateColumns="false"
                                    Font-Name="arial"
                                    showheader="false">
                        <Columns>
                              <asp:HyperLinkColumn
                                    DataNavigateUrlField="Name"
                                    DataNavigateUrlFormatString="staticfolder/{0}"
                                    DataTextField="Name"
                                    Target="_Blank" />
                        </Columns>
                  </asp:DataGrid><br />
                  
                  <asp:label id="lblDocCount" runat="server" />
            </form>
      </body>
</html>[/code]
0
Comment
Question by:narmi2
8 Comments
 
LVL 18

Expert Comment

by:DotNetLover_Baan
ID: 12225346
Which part is giving you trouble ?
-Baan
0
 
LVL 1

Author Comment

by:narmi2
ID: 12225362
the following needs to be dynamic, i dont know if thats possible without changing the whole solution:

DataNavigateUrlFormatString="staticfolder/{0}"

i need to get the variable "strOldPath into DataNavigateUrlFormatString somehow!
0
 
LVL 5

Expert Comment

by:stumpy1
ID: 12225369
Can you not just assign strPath to DataNavigateUrlFormatString through the VB server code?
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
LVL 1

Author Comment

by:narmi2
ID: 12225375
True, whats the best way to get around this?
0
 
LVL 1

Author Comment

by:narmi2
ID: 12225385
sorry i miss read your post stumpy.

I dunno how to do that?
0
 
LVL 1

Author Comment

by:narmi2
ID: 12225478
to give you a better understanding of the problem, the hyperlinks produce the following url

http://192.168.100.16/mainfolder/staticfolder/test.doc

I need the staticfolder bit to be dynamic.

I thought I would simply be able to do something like

DataNavigateUrlFormatString="<%strOldPath%>/{0}"

But this gives the following url

http://192.168.100.16/mainfolder/<%strOldPath%>/test.doc
0
 
LVL 28

Expert Comment

by:mmarinov
ID: 12225486
Hi,

replace this
<Columns>
                         <asp:HyperLinkColumn
                              DataNavigateUrlField="Name"
                              DataNavigateUrlFormatString="staticfolder/{0}"
                              DataTextField="Name"
                              Target="_Blank" />
                    </Columns>

with this

<Columns>
     <asp:TemplateColumn>
        <ItemTemplate>
            <asp:HyperLink id="hl" runat="server" NavigateUrl="<%# DataBinder.Eval(Container.DataItem, "strOldPath") %>/<%# DataBinder.Eval(Container.DataItem, "Name") %>" Text="<%# DataBinder.Eval(Container.DataItem, "Name") %>
" />

        </ItemTemplate>
     </asp:TemplateColumn>
</Columns>


Regards,
B..M
0
 
LVL 18

Accepted Solution

by:
DotNetLover_Baan earned 500 total points
ID: 12225502
This can be done in datagrid's ItemBound event.

Sub dgFileList_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        Dim HLCol As HyperLinkColumn
        HLCol = MyDataGrid.Columns(0)
        HLCol.DataNavigateUrlFormatString = "staticfolder/{0}"
End Sub
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In .NET 2.0, Microsoft introduced the Web Site.  This was the default way to create a web Project in Visual Studio 2005.  In Visual Studio 2008, the Web Application has been restored as the default web Project in Visual Studio/.NET 3.x The Web Si…
IntroductionWhile developing web applications, a single page might contain many regions and each region might contain many number of controls with the capability to perform  postback. Many times you might need to perform some action on an ASP.NET po…
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question