 pgadmin/ctl/ctlSQLGrid.cpp       | 25 +++++++++++++++++++++++++
 pgadmin/include/ctl/ctlSQLGrid.h |  1 +
 2 files changed, 26 insertions(+)

diff --git a/pgadmin/ctl/ctlSQLGrid.cpp b/pgadmin/ctl/ctlSQLGrid.cpp
index d82b3ff..853f884 100644
--- a/pgadmin/ctl/ctlSQLGrid.cpp
+++ b/pgadmin/ctl/ctlSQLGrid.cpp
@@ -27,6 +27,7 @@
 BEGIN_EVENT_TABLE(ctlSQLGrid, wxGrid)
 	EVT_MOUSEWHEEL(ctlSQLGrid::OnMouseWheel)
 	EVT_GRID_COL_SIZE(ctlSQLGrid::OnGridColSize)
+	EVT_GRID_LABEL_LEFT_CLICK(ctlSQLGrid::OnLabelClick)
 END_EVENT_TABLE()
 
 IMPLEMENT_DYNAMIC_CLASS(ctlSQLGrid, wxGrid)
@@ -393,6 +394,30 @@ void ctlSQLGrid::OnLabelDoubleClick(wxGridEvent &event)
 	}
 }
 
+void ctlSQLGrid::OnLabelClick(wxGridEvent &event)
+{
+	int row = event.GetRow();
+	int col = event.GetCol();
+
+	// add support for (de)selecting multiple rows and cols with Control pressed
+	if ( row >= 0 && (event.ControlDown() || event.CmdDown()) )
+	{
+		if (GetSelectedRows().Index(row) == wxNOT_FOUND)
+			SelectRow(row, true);
+		else
+			DeselectRow(row);
+	}
+	else if ( col >= 0 && (event.ControlDown() || event.CmdDown()) )
+	{
+		if (GetSelectedCols().Index(col) == wxNOT_FOUND)
+			SelectCol(col, true);
+		else
+			DeselectCol(col);
+	}
+	else
+		event.Skip();
+}
+
 void ctlSQLGrid::AutoSizeColumn(int col, bool setAsMin, bool doLimit)
 {
 	if (col < (int)colMaxSizes.GetCount() && colMaxSizes[col] >= 0)
diff --git a/pgadmin/include/ctl/ctlSQLGrid.h b/pgadmin/include/ctl/ctlSQLGrid.h
index 814b9bc..9a8f81f 100644
--- a/pgadmin/include/ctl/ctlSQLGrid.h
+++ b/pgadmin/include/ctl/ctlSQLGrid.h
@@ -37,6 +37,7 @@ public:
 	}
 	wxSize GetBestSize(int row, int col);
 	void OnLabelDoubleClick(wxGridEvent &event);
+	void OnLabelClick(wxGridEvent &event);
 
 	void AutoSizeColumn(int col, bool setAsMin = false, bool doLimit = true);
 	void AutoSizeColumns(bool setAsMin);
