Wednesday 28 November 2007

Collapsing all items in the Solution Explorer in Visual Studio

I sometimes get fed up up having to go through clicking solution folders to collapse everything to went on the hunt for a macro and came across this script by Scott Kuhl.

Sub CollapseAll()

' Get the the Solution Explorer tree
Dim solutionExplorer As UIHierarchy
solutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()

' Check if there is any open solution
If (solutionExplorer.UIHierarchyItems.Count = 0) Then
Return
End If

' Get the top node (the name of the solution)
Dim rootNode As UIHierarchyItem = solutionExplorer.UIHierarchyItems.Item(1)
rootNode.DTE.SuppressUI = True

' Collapse each project node
Collapse(rootNode, solutionExplorer)

' Select the solution node, or else when you click
' on the solution window
' scrollbar, it will synchronize the open document
' with the tree and pop
' out the corresponding node which is probably not what you want.

rootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
rootNode.DTE.SuppressUI = False

End Sub

Private Sub Collapse(ByVal item As UIHierarchyItem, ByRef solutionExplorer As UIHierarchy)

For Each innerItem As UIHierarchyItem In item.UIHierarchyItems
If innerItem.UIHierarchyItems.Count > 0 Then

' Re-cursive call
Collapse(innerItem, solutionExplorer)

' Collapse
If innerItem.UIHierarchyItems.Expanded Then
innerItem.UIHierarchyItems.Expanded = False
If innerItem.UIHierarchyItems.Expanded = True Then
' Bug in VS 2005
innerItem.Select(vsUISelectionType.vsUISelectionTypeSelect)
solutionExplorer.DoDefaultAction()
End If
End If

End If
Next

End Sub

Simply add a new Macro to visual Studio then paste in the code.

It can be run directly from the MyMacros window or if it is something you use a lot assign a shortcut key to it by doing the follwing:

Tools|Customize|Commands|Press the Keyboard Button|type the namespace path to the new macro and assign the key sequence. Voila.

Here is the link to the blog i got the script from.

Scott Kuhl's Blog

Wednesday 21 November 2007

Granting Execute Permissions to a user in SQL2005

I found it a chore to create execute permissions on all stored procedures in a database.

This query will do the job for you:

CREATE A ROLE AS FOLLOWS:

1.
/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor

2.
AND THEN when creating user, assign db_executor as role rather than dbo.


3.To assign user to all stored procedures in database run this.

SELECT 'grant exec on ' + QUOTENAME(ROUTINE_SCHEMA) + '.' +
QUOTENAME(ROUTINE_NAME) + ' TO ' FROM INFORMATION_SCHEMA.ROUTINES
WHERE OBJECTPROPERTY(OBJECT_ID(ROUTINE_NAME),'IsMSShipped') = 0

The web page you are viewing is trying to close the window

Today i added print functionality to a web page that basically changes the stylesheet for print formatting and also automatically fires the print dialogue for the user. On doing this in IE7 you get the message:

"The web page you are viewing is trying to close the window"

when running the follwing javascript added to the page on page load:

If Not ClientScript.IsStartupScriptRegistered(Me.GetType, "OnLoad") Then

ClientScript.RegisterStartupScript(Me.GetType, "OnLoad", "window.print();window.close();", True)

End If

All you need to do to counteract this is put the following javascript code in before the close:

window.open('','_self');

So the code will now look like this:

ClientScript.RegisterStartupScript(Me.GetType, "OnLoad", "window.print();window.open('','_self');window.close();", True)

Works a treat.

Wednesday 14 November 2007

ASP.net DataList v Repeater

In building the news feed in the previous article i initially used a data list. It all worked fin in IE but when i loaded the page up in Firefox my articles were showing outside the DIV they were supposed to be in! Confusing.

After investigating it with the IE Developers Toolbar i discovered the Datalist was outputting my news articles (which were built using the ul li structure) as tables!

NOTE: IE Developers toolbar is a wicked tool for web developers! Check it out here: Internet Explorer Toolbar This tool lets you see the DOM. Invaluable in debugging your pages.

I simply switched from using a DataList to a repeater and job done! My HTML was now as it was supposed to be and formatted in the correct div.

Paging Data From an XML file

I needed to display a news feed from an xml file. My original intentions were to use XML & XSL to tranform into html but i needed paging support.

I looked at the XMLData Source control and there isno paging support built onto this control. After a look around I came across a .NET class called PagedDataSource. This class abstracts the paging functionality that is used in data grids etc.

All you have to do is load the XML into a dataset, load the pageddatasource with the data from the dataset, set the paging on, set the page index and items per page. Voila! This can now be bound to any control that supports data binding. Wicked!

Here is some sample code binding it to a DataRepeater.



  1. Dim ds As New DataSet


  2. ds.ReadXml("Data.xml")


  3. Dim pagedData As New PagedDataSource


  4. Dim dv As New DataView(ds.Tables(0))

  5. dv.Sort = "SortDate DESC"


  6. pagedData.DataSource = dv

  7. pagedData.AllowPaging = True

  8. pagedData.PageSize = ItemsPerPage


  9. pagedData.CurrentPageIndex = CurrentIndex


  10. xmlRepeater.DataSource = pagedData

  11. xmlRepeater.DataBind()


  12. btnBack.Visible = Not pagedData.IsFirstPage

  13. btnMore.Visible = Not pagedData.IsLastPage

Thursday 8 November 2007

Changing the namespace of a Windows Workflow project

Today i modified the namespace of a workflow project. A little further down the track when it came to hosting the workflow the workflow runtime puked with the following message:

"Cannot initialize 'StateMachineWorkflowActivity' that does not define a valid 'InitialStateName' property."

The state machine workflow had the initial state set but as i has messed about the with the namespace i had a hunch what it was.

If you come across this error simply open up the workflow.xoml file with an XML editor and change the 'StateMachineWorkflowActivity x:Class' attribute to match your newly modified namespace, save and close.

Now when you build it will run fine. Hopefully VS2008 will fix this as i see it as a bug in the IDE. Changing the namespace should change the namespace in the xoml.

Wednesday 7 November 2007

TrainingSpot.com

The team behind LearnVisualStudio.net have been hard at work behind the scenes again and produced another fine training website TrainingSpot.com. This site is tailored to SQL Server, Sharepoint, TSQL, Biztalk and Relational Database Design and Implementation. I'm sure these categories will also expand over time.

As a member of LVS they are currently offering a voucher code for 25% off the price which you will find on the member pages. If you are not a member click one of the banners at the top of my blog to take you to the sign up pages.

Ive gone through approximately 50% of the initial content releases on TrainingSpot.com (and they have already released the next set of videos on SQL Server 2008) and i must say im impressed again by the quality of the video training on offer. The thing that beats me is the price - its SOOOOO CHEAP! I think these guys are selling themselves short but on the other hand its nice to see someone offering a quality service for an amazing price.

If you are interedted in software and database design and development then i cannot recommend learnvisualstudio.net and trainingspot.com enough. For the price of a good book you will receive a LIFETIME of training!!

Google Adsense Marketing

Dived into my first adventure in internet marketing to promote a website ive been working on. Im impressed by the whole adwords/adsense stuff that google has set up. It also quite exciting the first time you set somethign like that live - will we get some new business, how many visitors will we get... etc..

The results after a week of advertising are pretty good. The website was new and therefore very low traffic. Its turned a handful of visitors into over 200 per week with several good business enquiries arising from it. We had a page impression count of around 15,000 from quite a niche market so on the whole very pleased.

Heres hoping it continues to improve and we get some quality leads from it. Even just one good transaction should pay for the campaign!

Onwards and upwards.