DataGrid附加列和行

时间:2011-02-16 06:08:40

标签: c# .net wpf wpfdatagrid

<DataGrid Name="grid"
              HorizontalAlignment="Left"
              VerticalAlignment="Top"
              IsReadOnly="False"
              HeadersVisibility="None"
              AutoGenerateColumns="True"
              AutoGeneratingColumn="c_dataGrid_AutoGeneratingColumn">

public static DataView GetBindable2DArray<T>(this T[,] array)
        {
            DataTable dataTable = new DataTable();
            for (int i = 0; i < array.GetLength(1); i++)
            {
                dataTable.Columns.Add(i.ToString(), typeof(Ref<T>));
            }
            for (int i = 0; i < array.GetLength(0); i++)
            {
                DataRow dataRow = dataTable.NewRow();
                dataTable.Rows.Add(dataRow);
            }
            DataView dataView = new DataView(dataTable);
            for (int i = 0; i < array.GetLength(0); i++)
            {
                for (int j = 0; j < array.GetLength(1); j++)
                {
                    int a = i;
                    int b = j;
                    Ref<T> refT = new Ref<T>(() => array[a, b], z => { array[a, b] = z; });
                    dataView[i][j] = refT;
                }
            }
            return dataView;
        }

public class Ref<T>
    {
        private readonly Func<T> getter;
        private readonly Action<T> setter;
        public Ref(Func<T> getter, Action<T> setter)
        {
            this.getter = getter;
            this.setter = setter;
        }
        public T Value { get { return getter(); } set { setter(value); } }
    } 

这就是我的代码。我得到了这个DataGrid:

enter image description here

但这是额外的行和列。如何仅显示我的网格5x5没有空行?

1 个答案:

答案 0 :(得分:1)

我建议你检查GetLength(0)和GetLength(1)的返回值,以确保它们符合你的预期。另外,当我使用Data Grids时,我总是有一个额外的行(用于动态创建新行)。

更新: 当你将IsReadOnly设置为“True”时,附加行会消失(就像我说的那样,它是用于即时编辑)而附加列不是真正的列,它是行标题的空间,如右图所示。将HeadersVisibility设置为“All”或“Row”时,它会消失。