通过c#代码访问DataGrid并在DataGrid中操作数据



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对象。文档对象模型操作仅就额外的代码行而言是一种痛苦,它们在任何方式、形状或形式上都不安全,并且是维护的噩梦。

最新更新