我試圖讓DataGrid顯示一個object[][]
的內容。這將是隻讀的,所以我不在乎通知的變化或類似的東西。將ItemSource
設置爲object[][]
只是在網格中顯示Array
的屬性,而使用List<List<object>>
代替它會相同,這顯然是無益的。在DataGrid中顯示二維數組
每個1d數組中的列數可以是任意的;我只想爲每行中的每個數組元素創建一個未命名的列。我怎樣才能做到這一點?
我試圖讓DataGrid顯示一個object[][]
的內容。這將是隻讀的,所以我不在乎通知的變化或類似的東西。將ItemSource
設置爲object[][]
只是在網格中顯示Array
的屬性,而使用List<List<object>>
代替它會相同,這顯然是無益的。在DataGrid中顯示二維數組
每個1d數組中的列數可以是任意的;我只想爲每行中的每個數組元素創建一個未命名的列。我怎樣才能做到這一點?
請參閱我的回答this question。這也將啓用值的編輯。由於您只是想顯示它們,所以如果使用DataGrid不是必需條件,那麼使用Jobi Joy的答案可能會更容易。
從這個問題得到一個簡短的答案。你需要一個參考類
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); } }
}
和輔助類從二維數組
public class BindingHelper
{
public DataView GetBindable2DViewFromIList<T>(IList list2d)
{
DataTable dataTable = new DataTable();
for (int i = 0; i < ((IList)list2d[0]).Count; i++)
{
dataTable.Columns.Add(i.ToString(), typeof(Ref<T>));
}
for (int i = 0; i < list2d.Count; i++)
{
DataRow dataRow = dataTable.NewRow();
dataTable.Rows.Add(dataRow);
}
DataView dataView = new DataView(dataTable);
for (int i = 0; i < list2d.Count; i++)
{
for (int j = 0; j < ((IList)list2d[i]).Count; j++)
{
int a = i;
int b = j;
Ref<T> refT = new Ref<T>(() => (list2d[a] as IList<T>)[b], z => { (list2d[a] as IList<T>)[b] = z; });
dataView[i][j] = refT;
}
}
return dataView;
}
}
得到動態列後,您可以使用的ItemsSource這樣
<DataGrid Name="dataGrid"
RowHeaderWidth="0"
ColumnHeaderHeight="0"
AutoGenerateColumns="True"
AutoGeneratingColumn="dataGrid_AutoGeneratingColumn"/>
dataGrid.ItemsSource = BindingHelper.GetBindable2DViewFromIList<object>(m_2DArray);
private void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
DataGridTextColumn column = e.Column as DataGridTextColumn;
Binding binding = column.Binding as Binding;
binding.Path = new PropertyPath(binding.Path.Path + ".Value");
}
我最終在DataTable中使用'Rows.Add(rowArray)'創建行,並使用'AsDataView'擴展方法獲取DataView。 – thecoop 2010-12-16 14:14:23
從5點10K,恭喜:) – 2010-12-16 13:51:54
@Meleak:謝謝:) – thecoop 2010-12-16 14:49:14