How to add a DataGridView to a Windows Form

To display data in a DataGridView on a Windows Form

  • Add a new form to the Win Form Application project
  • Drag a BindingSource from the Toolbox to the form
    Visual Studio Toolbox Data

 

  • The bindingSource object appears below the form
    Visual Studio DataGridview Binding DatSource insert

 

  • Rename the Binding Source
    • Select the bindingSource1 object below the form
    • Press F4 to display the Properties
    • Change the Name property to reflect the purpose of the object
      Visual Studio DataGridview Binding DatSource properties

 

  • Select the DataSource item in the Data section and click the Add Project Data Source… link
    Visual Studio DataGridview Binding DatSource properties select data source

The name is misleading. At this step we are not selecting the source of the data, we are selecting the object that describes the data row. The DataGridView will generate the columns based on the object we will select here.

  • To load the data from a class select Object as the Data Source Type and click Next
    Visual Studio DataGridview Binding Data Source properties choose data source type

 

  • Select the object that describes the data row you want to display
    Visual Studio DataGridview Binding Data Source properties select data object

 

  • Drag a DataGridView from the Toolbox to the form
    Visual Studio Toolbox Data data grid view

 

  • Select the small arrow at the upper right corner of the DataGridView to open the Tasks dialog
  • Click the down arrow next tot the Choose Data Source list
  • Select the Binding Data Source that you added to the form
    Visual Studio DataGridview select binding data source

 

  • Click the Edit Columns link to set the visibility of the columns
    Visual Studio DataGridview Edit Columns

 

  • To hide a column set the Visible attribute in the Appearance section to False
    Visual Studio DataGridview Column visibility
  • To load data into the DatGridView add the following code to the constructor of the form. In this example the GetUsers() method returns an array of UserView objects
    // Load the data into the DataGridView
    bindingSourceUsers.DataSource = _business.GetUsers();
  • To hide the row selector column on the left side of the data add the following to the constructor of the form. This option is not included in the property sheet of the DataGridView, so we have to set it in the code.
    dataGridView1.RowHeadersVisible = false;

How to test SOAP web services from outside of the server with a web browser

SOAP web services that accept primitive type arguments (string, int, etc.) can be tested from a web browser.
For security reasons this feature is disabled if the web browser runs on another machine. To enable testing the SOAP web services in the test environment from another machine add the following to the system.web section of the Web.config file:

<webServices>
    <protocols>
        <add name="HttpPost"/>
        <add name="HttpGet"/>
    </protocols>
</webServices>

DbArithmeticExpression arguments must have a numeric common type

The Microsoft Visual Studio 2013 Entity Framework database query does not support the subtraction of two dates to calculate TimeSpan.

For example the following statement will throw a runtime error:

site.VisitFrequencySec < ((TimeSpan)(dtNow - site.LastVisitDate)).TotalSeconds)

To solve the problem create a computed database column to calculate the difference between the dates and use the computed value for comparison.

Column definition:

[SecondsSinceLastVisit]  AS (datediff(second,[LastVisitDate],getdate()))

Now you can use the computed column in the C# Entity Network comparison.

site.VisitFrequencySec < site.SecondsSinceLastVisit

The underlying provider failed on Open

When you get the following error message in Microsoft Visual Studio 2013 check the inner exception.

System.Data.Entity.Core.EntityException was unhandled
  HResult=-2146233087
  Message=The underlying provider failed on Open.
  Source=EntityFramework

The inner exception gives you detailed information on the real cause of the error. Most of the time the inner exception is the following:

InnerException: System.Data.SqlClient.SqlException
       HResult=-2146232060
       Message=Cannot open database “…” requested by the login. The login failed.
Login failed for user ‘…’.
       Source=.Net SqlClient Data Provider
       ErrorCode=-2146232060

Check the rights of the user. Most likely the specified user does not have access to the database.

 

The Entity Framework provider … could not be loaded

When you create a new Microsoft Visual Studio 2013 project that uses the Entity Framework you may get the following error message:
The Entity Framework provider type ‘System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer’ registered in the application config file for the ADO.NET provider with invariant name ‘System.Data.SqlClient’ could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.

  • Add the EntityFramework NuGet package to the Data Access project that accesses the database and the Web Application or Web Service project that calls the project
    • Right click the project in Solution Explorer
    • Select Manage NuGet Packages
    • On the left side select Online
    • On the right side enter EntityFramework into the search field
    • Click Install next to the EntityFramework package
  • Make sure your app config file contains the following lines:

 

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="v11.0" />
    </parameters>
  </defaultConnectionFactory>
  <providers>
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
  </providers>
</entityFramework>
  • Your project should contain a reference to EntityFramework.SqlServer.dll
  • Add the following line to the constructor of the class that accesses the database
var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
  • Add the System.Data.Entity reference to the project accessing the database

How to migrate the Visual Studio 2013 user database to SQL Server 2008

When you create a new web application in Microsoft Visual Studio 2013 the user database it creates is version 706. SQL Server 2008 can only open databases up to version 663 or earlier. To migrate the new Visual Studio 2013 databases to SQL Server 2008 script the database tables and create them again in the SQL Server 2008 Management Studio.

  • Start Visual Studio 2013
  • Create a new web application with user authentication
  • On the left side select the Server Explorer
  • Click the arrow next to the Data Connections
  • Click the arrow next to DefaultConnection
  • Click the arrow next to Tables
  • Right click each table and select Open Table Definition

visual studio script database table

At the bottom of the screen the table definition script appears

visual studio script database table result

You have to create the tables in the appropriate order, to satisfy the foreign key references. The script below creates the tables in the right order:

CREATE DATABASE your_database
GO
USE your_database
GO

--  ---------------------------------------------------------------------

CREATE TABLE [dbo].[__MigrationHistory] (
    [MigrationId]    NVARCHAR (150)  NOT NULL,
    [ContextKey]     NVARCHAR (300)  NOT NULL,
    [Model]          VARBINARY (MAX) NOT NULL,
    [ProductVersion] NVARCHAR (32)   NOT NULL,
    CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY CLUSTERED ([MigrationId] ASC, [ContextKey] ASC)
);
GO            

--  ---------------------------------------------------------------------

CREATE TABLE [dbo].[AspNetRoles] (
    [Id]   NVARCHAR (128) NOT NULL,
    [Name] NVARCHAR (MAX) NOT NULL,
    CONSTRAINT [PK_dbo.AspNetRoles] PRIMARY KEY CLUSTERED ([Id] ASC)
);
GO

--  ---------------------------------------------------------------------

CREATE TABLE [dbo].[AspNetUsers] (
    [Id]            NVARCHAR (128) NOT NULL,
    [UserName]      NVARCHAR (MAX) NULL,
    [PasswordHash]  NVARCHAR (MAX) NULL,
    [SecurityStamp] NVARCHAR (MAX) NULL,
    [Discriminator] NVARCHAR (128) NOT NULL,
    CONSTRAINT [PK_dbo.AspNetUsers] PRIMARY KEY CLUSTERED ([Id] ASC)
);
GO

--  ---------------------------------------------------------------------

CREATE TABLE [dbo].[AspNetUserClaims] (
    [Id]         INT            IDENTITY (1, 1) NOT NULL,
    [ClaimType]  NVARCHAR (MAX) NULL,
    [ClaimValue] NVARCHAR (MAX) NULL,
    [User_Id]    NVARCHAR (128) NOT NULL,
    CONSTRAINT [PK_dbo.AspNetUserClaims] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_dbo.AspNetUserClaims_dbo.AspNetUsers_User_Id] FOREIGN KEY ([User_Id]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE CASCADE
);
GO

--  ---------------------------------------------------------------------

CREATE TABLE [dbo].[AspNetUserLogins] (
    [UserId]        NVARCHAR (128) NOT NULL,
    [LoginProvider] NVARCHAR (128) NOT NULL,
    [ProviderKey]   NVARCHAR (128) NOT NULL,
    CONSTRAINT [PK_dbo.AspNetUserLogins] PRIMARY KEY CLUSTERED ([UserId] ASC, [LoginProvider] ASC, [ProviderKey] ASC),
    CONSTRAINT [FK_dbo.AspNetUserLogins_dbo.AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE CASCADE
);
GO
CREATE NONCLUSTERED INDEX [IX_UserId]
    ON [dbo].[AspNetUserLogins]([UserId] ASC);
GO

--  ---------------------------------------------------------------------

CREATE TABLE [dbo].[AspNetUserRoles] (
    [UserId] NVARCHAR (128) NOT NULL,
    [RoleId] NVARCHAR (128) NOT NULL,
    CONSTRAINT [PK_dbo.AspNetUserRoles] PRIMARY KEY CLUSTERED ([UserId] ASC, [RoleId] ASC),
    CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [dbo].[AspNetRoles] ([Id]) ON DELETE CASCADE,
    CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE CASCADE
);
GO
CREATE NONCLUSTERED INDEX [IX_RoleId]
    ON [dbo].[AspNetUserRoles]([RoleId] ASC);
GO
CREATE NONCLUSTERED INDEX [IX_UserId]
    ON [dbo].[AspNetUserRoles]([UserId] ASC);
GO

Execute the script in the SQL Server Management Studio

Warning: Attempt to present … on … while a presentation is in progress!

There is a warning message in Xcode, the Apple iOS development environment that can have many different causes.

Warning: Attempt to present … on … while a presentation is in progress!

In my case Xcode displayed the warning because a button called the same view twice.

xcode multiple calls to viewcontroller

When I deleted the action associated with the Touch Up Inside event the warning disappeared.

Xcode app development troubleshooting

This post is a collection of common error messages you may receive during application development in Xcode.

Error message

Receiver ‘NSManagedObjectContext’ for class message is a forward declaration

Solution

Add

#import <CoreData/CoreData.h>

to the … – Prefix.pch Prefix header file in the Supporting Files folder


 

QWERTY Hungarian keyboard on an English Macintosh keyboard

The English characters on the English and Hungarian keyboards are almost at the same place. The exceptions are the Z and Y keys, those are swapped.

When you activate the Hungarian keyboard on a Mac with an English keyboard, the Z key will display Y and the Y key will display Z on the screen. That is the German (and Hungarian) QWERTZ keyboard layout. On an English keyboard, it is much easier to use the QWERTY layout for the Hungarian language too.

On macOS Sierra (10.12.16)

Sierra already contains the Hungarian QWERTY keyboard

To select the QWERTY Hungarian layout

  1. On the settings page select the Keyboard
  2. On the Input Sources tab click the + sign
  3. Select the Hungarian – QWERTY layout and click the Add button

For earlier Mac OS versions

In the past, the following page contained a Hungarian layout for English keyboards at http://blog.felho.hu/hungarian-unicode-qwerty-keyboard-layout.html by “Felho”

The page is not available anymore, but I have found the keyboard layout files in the Wayback Machine internet archive at https://web.archive.org/web/20120315000000*/http://blog.felho.hu/wp-content/felhokeylayout.zip

I have downloaded the ZIP file from the archive and you can download it below in step 1.

Get a QWERTY Hungarian layout

To set up the QWERTY Hungarian keyboard layout

  1. To download the keyboard file ZIP archive click this link: felhokeylayout.zip
  2. Click the Downloads shortcut on your desktop
    open downloads folder
  3. Click the downloaded layout file to open it
    hungarian qwerty keyboard open downloaded file
  4. Select the two files
    hungarian qwerty keyboard files
  5. Copy the two files into the Macintosh HardDrive -> Keyboard Layouts folder
    keyboard layouts folder
  6. Log out of the computer
  7. When you log in again your Mac will find the new keyboard layout
  8. In the Personal section of the System Preferences select Language and Text
    language and text
  9. On the Input Sources tab select the Hungarian PRO FB keyboard
    hungarian qwerty keyboard selection

On the top of the screen between the battery status and the time you will see the name of the keyboard layout you currently use.

keyboard selection

Click the icon to select the other layout.

If you want to create your own special keyboard layout

If you want to create your own keyboard layout, there is a small application that can create a customized keyboard layout: Ukelele.

You can download it from their website at http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=ukelele.

 

Save an image in the Xcode iPhone simulator

When you are testing an app in the Xcode iOS Simulator sometimes you need to select an image in the photo library. To add images to Photos in the Xcode iOS Simulator

  • Run you app in the iOS iPhone Simulator
  • In the Hardware menu select Home to hide your app
  • Open the Safari browser in the iOS Simulator
  • Navigate to a page with images
  • Press and hold the mouse on the image for a few seconds
  • A pop-up window appears
    ios simulator save image
  • Select Save Image to save the picture in the photo library of the Xcode iOS Simulator