带有Items的WPF DataGrid可编辑单元格

时间:2015-03-25 11:39:12

标签: c# wpf datagrid

所以,我有一个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;

这确实以完全相同的方式填充数据,更重要的是,数据现在可以编辑。 但我的自定义行标题消失了。 我也需要它们,我认为我不想对行标题值使用绑定。

第一种方法可以以某种方式修改为仍然可编辑,但数据的行以相同的方式填充吗?

1 个答案:

答案 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;

直到现在(测试的时间非常短暂),这似乎是我所寻找的,希望它可以帮助别人。