My DataGrid XAML code
1-我希望能够添加新的行和访问数据网格的一列的数据,我已经尝试使用名称道具,但它不起作用…
2-之后,要添加新行,我只需要调用dataGrid的add方法。物品吗?我用什么来填充这个方法?
创建一个类,用属性表示列,比如这里的回答?3-我有一个名为"Nota"的列,我如何访问该列在每一行的数据?
提前感谢,
——
1。您不能通过名称访问网格,因为有多个动态网格,并且不能有多个具有相同名称的字段(当然,如果可能的话,这将没有帮助)。
2。当ItemsSource
被绑定时,您不能修改Items
,但您可以更改ItemsSource
,以下是如何做到这一点的示例:
<TabControl Name="_tabControl">
<TabControl.Resources>
<XmlDataProvider x:Key="data" XPath="GPA/Semestre"
Source="http://pastebin.com/raw.php?i=JgyYkn4E" />
</TabControl.Resources>
<!-- ... -->
<TabControl.ContentTemplate>
<DataTemplate>
<StackPanel>
<DataGrid Name="localDG" ItemsSource="{Binding XPath=Cadeiras/Cadeira}"
AutoGenerateColumns="False" Tag="{Binding XPath=Cadeiras}">
<DataGrid.Columns>
<!-- ... -->
</DataGrid.Columns>
</DataGrid>
<Button Content="Add Row" Click="AddRow_Click" Tag="{x:Reference localDG}" />
</StackPanel>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
private void AddRow_Click(object sender, RoutedEventArgs e)
{
var data = _tabControl.Resources["data"] as XmlDataProvider;
var dg = (sender as FrameworkElement).Tag as DataGrid; //Reference to DataGrid is stored in the Button.Tag
var cadeiras = dg.Tag as XmlNode; //Used DataGrid.Tag to store parent node of cadeiras so a new cadeira can be added
var newItem = data.Document.CreateElement("Cadeira");
Action<string,string> addProperty = (name, val) =>
{
var prop = data.Document.CreateElement(name);
prop.InnerText = val;
newItem.AppendChild(prop);
};
addProperty("Activa","1");
addProperty("Nome","Lorem Ipsum");
addProperty("Nota","1.3");
cadeiras.AppendChild(newItem);
}
3。使用与2中类似的方法。您可以查询该属性的项(例如使用LINQ)
附带说明:如果您有机会做比这多一点的操作,我建议将XML反序列化为适当的clr对象。文档对象模型操作仅就额外的代码行而言是一种痛苦,它们在任何方式、形状或形式上都不安全,并且是维护的噩梦。