浏览代码

Fixed TableView when redrawing a System.DataTable that has no columns (#1639)

Thomas Nind 3 年之前
父节点
当前提交
f96c7001e4
共有 2 个文件被更改,包括 22 次插入5 次删除
  1. 5 5
      Terminal.Gui/Views/TableView.cs
  2. 17 0
      UnitTests/TableViewTests.cs

+ 5 - 5
Terminal.Gui/Views/TableView.cs

@@ -621,7 +621,7 @@ namespace Terminal.Gui {
 		/// <inheritdoc/>
 		public override bool ProcessKey (KeyEvent keyEvent)
 		{
-			if (Table == null) {
+			if (Table == null || Table.Columns.Count <= 0) {
 				PositionCursor ();
 				return false;
 			}
@@ -865,7 +865,7 @@ namespace Terminal.Gui {
 				SetFocus ();
 			}
 
-			if (Table == null) {
+			if (Table == null || Table.Columns.Count <= 0) {
 				return false;
 			}
 
@@ -925,7 +925,7 @@ namespace Terminal.Gui {
 		/// <returns></returns>
 		public Point? ScreenToCell (int clientX, int clientY)
 		{
-			if (Table == null)
+			if (Table == null || Table.Columns.Count <= 0)
 				return null;
 
 			var viewPort = CalculateViewport (Bounds);
@@ -956,7 +956,7 @@ namespace Terminal.Gui {
 		/// <returns></returns>
 		public Point? CellToScreen (int tableColumn, int tableRow)
 		{
-			if (Table == null)
+			if (Table == null || Table.Columns.Count <= 0)
 				return null;
 
 			var viewPort = CalculateViewport (Bounds);
@@ -1137,7 +1137,7 @@ namespace Terminal.Gui {
 		/// <returns></returns>
 		private IEnumerable<ColumnToRender> CalculateViewport (Rect bounds, int padding = 1)
 		{
-			if (Table == null)
+			if (Table == null || Table.Columns.Count <= 0)
 				yield break;
 
 			int usedSpace = 0;

+ 17 - 0
UnitTests/TableViewTests.cs

@@ -74,6 +74,23 @@ namespace Terminal.Gui.Views {
 			Assert.Equal (1, tableView.ColumnOffset);
 		}
 
+		[Fact]
+		[AutoInitShutdown]
+		public void Redraw_EmptyTable ()
+		{
+			var tableView = new TableView ();
+			tableView.ColorScheme = new ColorScheme();
+			tableView.Bounds = new Rect (0, 0, 25, 10);
+
+			// Set a table with 1 column
+			tableView.Table = BuildTable (1, 50);
+			tableView.Redraw(tableView.Bounds);
+
+			tableView.Table.Columns.Remove(tableView.Table.Columns[0]);
+			tableView.Redraw(tableView.Bounds);
+		}
+
+
 		[Fact]
 		public void SelectedCellChanged_NotFiredForSameValue ()
 		{