所以,我有一个DataGrid,我想以编程方式操作很多。
string[] values = new string[something.Count];
for (int i = 0; i < somethingElse.Count; i++)
{
if (condition)
values[i] = Data[i].ToString();
else
values[i] = "";
}
var style = new System.Windows.Style(typeof(DataGridRowHeader));
style.Setters.Add(new Setter(DataGridRowHeader.ContentProperty, Data[0].ToString()));
MyGrid.Items.Add(new DataGridRow()
{
HeaderStyle = style,
Item = values
});
这是我在循环中做的,我能够用我需要的所有数据填充我的网格。 后来,我能够访问单元格,编辑它们,获取它们的值,无论我想要什么和需要什么。 但是,当用户想要像在MS Excel中一样使用网格时,单元格不可编辑。
所以我走了另一条路并创建了一个:
ObservableCollection<ObservableCollection<string>> gridData = new ObservableCollection<ObservableCollection<string>>();
//*** ... *** the gridData is filled in the same way, you can imagine
MyGrid.ItemsSource = gridData;
这确实以完全相同的方式填充数据,更重要的是,数据现在可以编辑。 但我的自定义行标题消失了。 我也需要它们,我认为我不想对行标题值使用绑定。
第一种方法可以以某种方式修改为仍然可编辑,但数据的行以相同的方式填充吗?
答案 0 :(得分:0)
我最终结合上述两种方法解决了这个问题。
首先,我生成ObservableCollection<ObservableCollection<string>> dataCollection
,用数据填充它。
接下来,我会生成一个ObservableCollection<DataGridRow> rowCollection
集合。
在我从第一种方法循环的声明部分中,您可以在问题中看到,我这样做
rowCollection.Add(new DataGridRow()
{
HeaderStyle = style,
Item = dataCollection[i] //for the corresponding iteration element
});
这一切都在设置
时结束MyGrid.ItemsSource = rowCollection;
直到现在(测试的时间非常短暂),这似乎是我所寻找的,希望它可以帮助别人。