Moving items between bound Listboxes

The other day I wanted to add news tags feature to a program, and to make it easy I wanted the user to be able of adding and removing news tags by double clicking a Listbox of available tags and assigned tags.

How I wanted Listboxes Tags to work

If you need to move items between bound Listboxes you cannot just use the Listbox.Add or Listbox.Remove methods. Instead you should add and remove rows to the Tables which they’re bound to.

This is the code I used:

    Private Sub AvailableTagListBox_DoubleClick(sender As System.Object, e As System.EventArgs) Handles AvailableTagListBox.DoubleClick
        If Not IsNothing(AvailableTagListBox.SelectedItem) Then
            'We are making a new row to be added to the table which then will appear in the listbox
            Dim Customer_News_Tags_Row As DataRow = MyDataSet.Customer_News_Tags.NewRow
            'Since I have a Parent and Child relation I'm taking the current parent ID
            Dim NewsRow = DirectCast(Me.Customer_NewsBindingSource.Current, DataRowView)
            'Parent ID
            Customer_News_Tags_Row("News_ID") = NewsRow("ID")
            'Fill the listbox item display field which I have it bound to
            Customer_News_Tags_Row("Tag") = AvailableTagListBox.Text

            'Adding new item to the other listbox by adding new row to its table
            MyDataSet.Customer_News_Tags.AddCustomer_News_TagsRow(Customer_News_Tags_Row)
            'Delete the listbox item by deleting the row in its table
            MyDataSet.News_Tags.Select("ID=" & AvailableTagListBox.SelectedValue)(0).Delete()

        End If

    End Sub

    Private Sub AssignedTagListBox_DoubleClick(sender As System.Object, e As System.EventArgs) Handles AssignedTagListBox.DoubleClick
        If Not IsNothing(AssignedTagListBox.SelectedItem) Then

            Dim News_Tags_Row As DataRow = MyDataSet.News_Tags.NewRow
            'I'm using a field called Tag
            News_Tags_Row("Tag") = AssignedTagListBox.Text

            MyDataSet.News_Tags.AddNews_TagsRow(News_Tags_Row)
            'Here I'm matching with a field I have called Tag to delete from Assigned listbox items
            MyDataSet.Customer_News_Tags.Select("Tag='" & AssignedTagListBox.SelectedValue & "'")(0).Delete()

        End If
    End Sub

Hope this helps, and if you need any clarifications let me know :)

Share

Move project to another Visual Studio Online account

Let’s say you have a project source hosted in your private Visual Studio Online (Team Foundation Service) account and you want to move it to another account. The easiest way I found is to connect to the new account from Visual Studio (File->Connect to Team Project) and add the items to the source control:

TFS Add Items

Assuming you already have the source on your computer, just select them to be added. Also It will ask you to map a new work space for this new source:

TFS Map WorkSpace

Hit finish and then you are ready to check in the files.

I’ve been using Visual Studio Online for few months now since it was in beta when it was called Team Foundation Service and I totally love it!

The service gives you the ability to collaborate for free for up to 5 members and then you need to license users. I used it to collaborate with a friend and it gave us great help and it was very easy to use. Even though it is great for collaboration but I think you can use it also on your own for good maintenance.

Share

GameMaker Studio with Visual Studio 2013 settings

If you are trying to use GamerMaker Studio wih Visual Studio 2013 and getting the error Unable to validate WinJS API Reference even though you prepared the requirements you have to change the settings to point to Visual Studio 2013 directory and change the WinJS version to 2 like in the following screenshot:

Game Maker VS2013

Note that I have pointed the Windows SDk to 8.1 since I’ve got Windows 8.1.

 

Share

Crystal Reports Unknown Database Connector Error

I was working on a report which involved several tables and relationships between these tables.

I made sure that I’ve loaded and filled the table sources I tried launching my report but kept on getting the error “Unknown Database Connector Error”.

After a little bit of debugging what I suspected was true. You have to make sure that the tables or the tables’ links are executed in a correct order that doesn’t break the relations.
Basically it is best to load the father tables and then children tables.

To do that open the Database Expert which comes with Crystal Reports -> Links -> Order Links

Crystal Reports Link Order

It worked for me without checking the “Link ordering is enforced”.

Hope this helps :)

Share

Editable bound DataGridView ComboBox

A bound DataGridView ComboBox Column doesn’t allow user input. You might come across a situation where you need to make it easier for the user to select an item from the ComboBox and at the same time allow them to just enter free text.

The trick is to make the ComboBox column without a DataSource and then you load the items by code. Also you have to handle a couple of stuff such as the EditingControlShowing event to convert the ComboBox style to be DropDown instead of DropDownList, and some other handling to commit the ComboBox change.

I will leave you with the code:

Private Sub MyForm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    'Get ComboBox items
    Me.ComboBoxTableAdapter.Fill(Me.MyDataSet.ComboBoxTable)

    'Fill the ComboBox
    Dim row As DataRow
    For Each row In Me.MyDataSet.ComboBoxTable
        'Generic list used as a trick to have the ComboBox Items added with Value
        MyComboBox.Items.Add(New GenericListItem(Of String)(row.Item("ColName"), row.Item("ColValue")))

    Next

    Me.GridTableAdapter.Fill(Me.MyDataSet.GridTable)

    'Adding Grid handler to detect change in run time
    AddHandler MyDataGridView.CurrentCellDirtyStateChanged, AddressOf MyDataGridView_CurrentCellDirtyStateChanged

End Sub

'Change ComboBox style to DropDown
  Private MyDataGridView_EditingControlShowing(ByVal sender As Object, ByVal e As MyDataGridViewEditingControlShowingEventArgs) Handles MyDataGridView.EditingControlShowing
        If TypeOf e.Control Is ComboBox Then
Dim cb As ComboBox = TryCast(e.Control, ComboBox)

            cb.DropDownStyle = ComboBoxStyle.DropDown
        End If

'When an item is selected from the ComboBox update the cell value
        If MyDataGridView.Columns(MyDataGridView.CurrentCell.ColumnIndex).Name = "MyComboBox" Then
Dim selectedComboBox As ComboBox = DirectCast(e.Control, ComboBox)
            RemoveHandler selectedComboBox.SelectionChangeCommitted, AddressOf selectedComboBox_SelectionChangeCommitted
            AddHandler selectedComboBox.SelectionChangeCommitted, AddressOf selectedComboBox_SelectionChangeCommitted

        End If

    End Sub

Private Sub selectedComboBox_SelectionChangeCommitted(ByVal sender As Object, ByVal e As EventArgs)
    Try

        Dim selectedCombobox As ComboBox = DirectCast(sender, ComboBox)
        If selectedCombobox.SelectedItem IsNot Nothing Then

            'Use the List we created earlier so we could retrieve the Value instead of the diplayed text
            Dim oItem As GenericListItem(Of String) = CType(selectedCombobox.SelectedItem, GenericListItem(Of String))

            Me.MyDataGridView.Item("ColumnName", MyDataGridView.CurrentCell.RowIndex).Value = oItem.Value()

        End If

    Catch ex As Exception
        MessageBox.Show(ex.Message)

    End Try
End Sub

Private Sub MyDataGridView_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As EventArgs) Handles MyDataGridView.CurrentCellDirtyStateChanged
    'Commit the change which was in run time so the Value changed event happens and then allow one check box
    If MyDataGridView.IsCurrentCellDirty Then
        MyDataGridView.CommitEdit(MyDataGridViewDataErrorContexts.Commit)
    End If
End Sub

Private Sub MyDataGridView_CellValidating(sender As Object, e As System.Windows.Forms.MyDataGridViewCellValidatingEventArgs) Handles MyDataGridView.CellValidating

    'Allow user to enter new values for all MyDataGridViewComboBox controls in the MyDataGridView
    If (TypeOf CType(sender, MyDataGridView).EditingControl Is MyDataGridViewComboBoxEditingControl) Then
        Dim cmb As MyDataGridViewComboBoxEditingControl = CType(CType(sender, MyDataGridView).EditingControl, MyDataGridViewComboBoxEditingControl)
        If Not cmb Is Nothing Then
            Dim grid As MyDataGridView = cmb.EditingControlMyDataGridView
            Dim value As Object = cmb.Text
            '// Add value to list if not there
            If cmb.Items.IndexOf(value) = -1 Then
                '// Must add to both the current combobox as well as the template, to avoid duplicate entries...
                cmb.Items.Add(value)
                Dim cmbCol As MyDataGridViewComboBoxColumn = CType(grid.Columns(grid.CurrentCell.ColumnIndex), MyDataGridViewComboBoxColumn)
                If Not cmbCol Is Nothing Then
                    cmbCol.Items.Add(value)
                End If
            End If
            grid.CurrentCell.Value = value
        End If
    End If

    ''Following Works for a specific combobox ///////////

    'If e.ColumnIndex = MyMyDataGridView.Columns("MyDataGridViewComboBoxColSize").Index Then 'CType(sender, MyDataGridView).CurrentCell.ColumnIndex

    ' 'Dim cmb As ComboBox = CType(e.Control, ComboBox)

    ' Dim cmb As MyDataGridViewComboBoxEditingControl = CType(CType(sender, MyDataGridView).EditingControl, MyDataGridViewComboBoxEditingControl)

    ' If Not cmb Is Nothing Then

    ' Dim grid As MyDataGridView = cmb.EditingControlMyDataGridView

    ' Dim value As Object = cmb.Text

    ' '// Add value to list if not there

    ' If cmb.Items.IndexOf(value) = -1 Then

    ' '// Must add to both the current combobox as well as the template, to avoid duplicate entries...

    ' cmb.Items.Add(value)

    ' Dim cmbCol As MyDataGridViewComboBoxColumn = CType(grid.Columns(grid.CurrentCell.ColumnIndex), MyDataGridViewComboBoxColumn)

    ' If Not cmbCol Is Nothing Then

    ' cmbCol.Items.Add(value)

    ' End If

    ' grid.CurrentCell.Value = value

    ' End If

    ' End If

    'End If
End Sub

Public Class GenericListItem(Of T)
    Private mText As String
    Private mValue As T

    Public Sub New(ByVal pText As String, ByVal pValue As T)
        mText = pText
        mValue = pValue
    End Sub

    Public ReadOnly Property Text() As String
        Get
            Return mText
        End Get
    End Property

    Public ReadOnly Property Value() As T
        Get
            Return mValue
        End Get
    End Property

    Public Overrides Function ToString() As String
        Return mText
    End Function
End Class

I hope this helps, and if you have any question let me know.

Happy coding :)

Share

Learn SharePoint 2010 without installations or top hardware

So you have decided you want to get into SharePoint, but you find out that you need to have a pretty strong machine to run it. Actually the latest SharePoint 2010 needs 6 GB of RAM as a starting point to run well and a 64 bit Windows 2008 operating system.

You could actually learn without installing a thing! Yes. Microsoft offers a great service called MSDN Virtual Labs.MSDN vlab Using these Virtual Labs you can test and try almost every Microsoft technology and product. And of course SharePoint Virtual Labs is one of them. In the Lab courses you get to learn and have hands-on experience. They even include software which you would need like SharePoint Designer. Really helpful.

So go on and have fun Smile

Share

Make Connectify work with Avast

Recently I updated Connectify to version 3.1 and it just stopped working.

After sometime of trial and error I found out that Avast Antivirus(I have Avast Internet Security) was blocking some essential ports which Avast uses.

Basically what needs to be done are two things:

  1. Enable the Internet Sharing mode in the Firewall settings

    Enable Sharing Mode

  2. Enable some Firewall packet rules for the application ConnectifyNetServices.exe

    Enable some Packet Rules

That’s set, your ready Smile go ahead and try it.

Share

Microsoft and Hadoop

Looks like Microsoft is going to start integrating Hadoop based services in its server and database products. The services will be implemented in Windows Server, Azure and SQL Server 2012.

Hadoop open source project which is if I may say for cloud and distributed computing came to the picture as I  remember when Yahoo announced that they will be using it to store their data. That was long time ago. Later I also learned that other companies which need to manage their big volume of data like Google actually uses it too.

The good thing is that according to Microsoft’s statement is that existing Microsoft Business Intelligence tools will be compatible with Hadoop implementation.

Microsoft’s Hadoop’s efforts already showing results like a Hadoop to SQL Server connector for importing and exporting and an ODBC driver for Hive for real time querying from business intelligence tools into Hadoop.

Microsoft promised that they will contribute back whatever changes or additions they make and will commit to make it compatible with the open source project.

I love SQL Server and I’m glad to see this move from Microsoft. Hopefully this will help better manage big data requirements.

Share

How to save on Mobile bills in Syria

Just wanted to share a few tips about reducing your mobile bill.

So far we got two Mobile providers in Syria which are almost identical. SyriaTel and MTN.

SMS

It is not just in Syria, but in a lot of countries Mobile companies still charges a lot for SMS despite how simple it is.

Lately I noticed that MTN and SyriaTel are offering good bundles to reduce the SMS cost.

So I advice all the people who uses SMS to pick one of the offers below. It will even reduce your mobile bill while using SMS instead of calling :) I think the 100 SMS is sweet.

SyriaTel

Send SMS with the code to number 1220:

Messages Price Saving Code
25 SMS 50 SYP %67 ر 25
100 SMS 100 SYP %83 ر 100
3000 SMS 1500 SYP %92 ر 3000

MTN

To subscribe call *111# and choose package number:

Messages Price
25 SMS 50 SYP
100 SMS 100 SYP
Unlimited 1500 SYP

 

GPRS

While I still think that the GPRS cost is very high, the bundles are still a way to save some money if you need to use GPRS.

SyriaTel

Send SMS with the code to number 1221:

Messages Price Saving Code
3MB 50 SYP %33 ج 3
5MB 75 SYP %40 ج 5
12MB 150 SYP %50 ج 12
25MB 250 SYP %60 ج 25

MTN

To subscribe call *111# and choose package number:

Messages Price
3MB 50 SYP
5MB 75 SYP
12MB 150 SYP
25MB 250 SYP

 

Well that’s set for now, hope you like it :)

Share

Twitter Plugin for Windows Live Photo Gallery

Windows Live Essentials comes with lot of awesome applications.

My favorite is Windows Live Photo Gallery. Nice way of organizing and sharing your photos. Most favorite feature is facial recognition, which let you find photos by faces.

After adding photos it starts recognizing faces and ask you to tag the persons in the photos. After tagging people the application starts guessing the persons in the photos and asks if the guess was correct or not. And it gets better at it very fast.

So in the future, whenever you add new photos it will automatically tag people. I started adding really old photos, and I was surprised by its ability to guess that it’s me in a very old photo when I was about 3 years old! So smart!

Other great feature is how easy it is to share photos and videos. Out of the box you can submit your files to SkyDrive (Awesome free 25GB space from Microsoft), Flickr, Youtube and others. But I couldn’t find an option for Twitter!

That’s why I started making a Twitter plugin for Windows Live Photo Gallery. And I made it open source since I couldn’t find any open source plugin for the Windows Live Photo Gallery.

I used CodePlex to host the project and TortoiseHg for distributed revision control system.

Please note that this project is not complete yet. What is left for now is the integration with Windows Live Gallery.

What I’ve finished and is working now is uploading a photo to TwitPic and then post it to Twitter along with a message. What’s left is only using the Windows Live Gallery SDK to communicate with this little application.

The project is hosted here: http://twitter4wlpg.codeplex.com/

You are welcome if you would like to give a hand :)

Share

Grilled Chicken breast with Lemon and Thyme

Growing Thyme at home inspired me to cook something.

I opened the fridge and decided to use whatever I find.

Ingredients:
20110608-075016.jpg

  • 1/2 Kilo of skinless boneless Chicken breast
  • 2 Lemons
  • 3 spoons Olive oil
  • Pepper and Salt
  • 1 tea spoon of smashed garlic
  • Fresh Thyme
  • Flour (Decided not to use it)

Instructions:

I though it would taste good if I soak the Chicken with Lemon, so I squeezed a Lemon and a half into a plastic bag to soak the Chicken in it. Before that I splashed the Chicken breast with some salt and pepper. After that I placed the Chicken in the bag with some fresh Thyme leafs.

20110608-075035.jpg

And I left it in the fridge for about an hour.

When it was cooking time I spilled the olive oil on the pan and was heating it up on low fire, because I know olive oil gets hot quickly. Now it is garlic time. I love garlic, actually I love eating it but not getting it ready to be eaten. Thankfully my dear wife has already smashed some garlic and was stored in the fridge. Phew!

I tossed the garlic in the pan and moved them around till they started getting brown. Then I took the Chicken out of the plastic bag and started cooking it. I also spilled the Lemon which was left in the bag into the pan. Kept on flipping the Chicken until the Lemon and olive oil almost completely dried and the Chicken was brown. Yum! The smell was awesome! Oh writing this now made drool :)

20110608-075100.jpg

After the grilling was done I sprayed around some more fresh not cooked Thyme and squeezed the left half of Lemon over the Chicken. That’s set! It is now ready. To add more to the dish I just fried some french fries and I’m done.

20110608-075136.jpg

20110608-075153.jpg

I never did a big meal before, no bigger than a Burger with french fries, but I was happy about the results and my wife approve too :D

Share

Thyme

20110523-074208.jpg
Well I wanted to test WordPress for iPhone. Seems nice for mobile blogging.

Above is what I’m drinking. Home grown Thyme! Yup. It’s awesome for when having a flu and to refresh the respiratory system.

So this new WordPress iPhone app might actually get me blogging more.

Share

Thoughts about smart phones operating systems

We are becoming very dependent on our mobile devices. They are being used on a daily basis for communications, getting tasks done and even for entertainment.

Google has a nice video here to give you an insight of how important the mobile devices are becoming.

Mobile devices comes in many different shapes and styles, but I think what is more important than the hardware is its operating system.

Symbian

Dead! I have used Symbian ever since I got my first mobile. They were the best back then and until just recently. But Nokia had to make a change and now they are tied with Windows Phone 7.

Android

Pretty much a copy cat! Maybe this is a bit harsh, but this what I really think. Of course I mean copying iOS. Same grid of icons style and many other things. The only cool thing I see about Android is how easy it is to customize everything. Heck, I can even replace the SMS app! Which personally never thought of it before. At the end I feel it is clunky and more geek oriented. Not very much for the normal user. Many analysis companies predicting its dominance in the future. In my opinion that is because it is free. Free for the hardware companies to install it on their devices. Which make them able of shipping many kinds of hardware with Android system. Still, I don’t like the user experience with it.

As for developing for Android you use sort of Java. Probably will use Eclipse or what ever IDE you like.

Coming from .NET development, I didn’t like it! The IDE compared to Visual Studio is just lame.

Windows Phone 7

I was so excited when I heard Microsoft are working on a new version of their mobile system which will be done from scratch. And I think they delivered. They came out with a unique design and user experience. They didn’t just imitate other operating systems! You really feel that they had researchers who worked to study each aspect of it. For example, you can see here how they had a team to research the best way to make a virtual on screen keyboard.

Windows Phone 7 now is still a version 1 which means it still lacks some stuff and behind more mature operating systems such as Android and iOS. Also seems to have restrictions on developers more than what iOS had when it was out.

As Microsoft promised in Mix 11 event, all of these issues will be address with Mango update which is probably coming out on September 2011.

As for developing for Windows Phone 7, Microsoft got the best tools for it, and they are free!

Microsoft is mainly a software company, so I think they got the best developing tools.

Windows Phone 7 has a bright future in my opinion.

iOS

Smooth, currently best user experience, mature. That’s it!

I think Apple are truly innovators. They ask for premium prices, but in exchange they give you delicious hardware and great user experience.

Share

Qualified companies competing for the third mobile operator in Syria announced

According to a document released by the Syrian Ministry of Communication and Technology, the finalists companies competing to nab the license for the third mobile operator in Syria are:

  • Emirates Telecommunications Corporation (UAE)
  • France Telecom (France)
  • Qatar Telecom QSC (Qatar)
  • Saudi Telecom company (KSA)
  • Turkcell (Turkey)

After being qualified,  the companies will start submitting their proposals on the 12th of December.

Third mobile operator, we are waiting for you :)

UPDATE: UAE Etisalat quit the bidding, they’re uncool with the regulations. Source.

Share

Closing unnecessary Windows Services for more RAM

After upgrading my old machine, I started installing my Development tools. One of the tools I use is Microsoft SQL Server 2008 for creating Databases and Business Intelligence. From my experience that tool is not very CPU or RAM friendly :) . It runs a lot of services like the Reporting service, Integration Services…etc.

I didn’t want these services to hog the computer for normal usage, so I created a simple batch file to close these unnecessary service.

To create a batch file just create a new empty text file and rename it to have the extension .bat.

In my batch file I’m shutting down MS SQL Server services and VMWare services:

net stop VMAuthdService
net stop VMnetDHCP
net stop “VMware NAT Service”
net stop “VMUSBArbService”
net stop SQLWriter
net stop SQLBrowser
net stop SQLAgent$MSSQLSERVER2008
net stop MSSQLFDLauncher$MSSQLSERVER2008
net stop MSSQL$SQLEXPRESS
net stop MSSQL$MSSQLSERVER2008
net stop MSOLAP$MSSQLSERVER2008
net stop MsDtsServer100
net stop ReportServer$MSSQLSERVER2008

Note that the SQL Services’ names are probably different on your machine. It depends on what did you call your Database’s instance name.

Here is a list of SQL Server services names.

To start the services again, just create another batch file and use “net start” instead of “net stop”.

Share