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

diff --git a/pgadmin/ctl/ctlSQLGrid.cpp b/pgadmin/ctl/ctlSQLGrid.cpp
index 35d638f..668f89c 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,33 @@ void ctlSQLGrid::OnLabelDoubleClick(wxGridEvent &event)
 	}
 }
 
+void ctlSQLGrid::OnLabelClick(wxGridEvent &event)
+{
+	int row = event.GetRow();
+	int col = event.GetCol();
+
+	// add support for deselecting rows and cols
+	if (event.ControlDown() || event.CmdDown())
+	{
+		if (row >= 0)
+		{
+			if (GetSelectedRows().Index(row) == wxNOT_FOUND)
+				SelectRow(row, true);
+			else
+				DeselectRow(row);
+		}
+		else if (col >= 0)
+		{
+			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 < colMaxSizes.GetCount() && colMaxSizes[col] >= 0)
diff --git a/pgadmin/include/ctl/ctlSQLGrid.h b/pgadmin/include/ctl/ctlSQLGrid.h
index 9cb0a8d..7e9969e 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);
