Доступ к DataGrid через код C # и манипулирование данными внутри DataGrid - PullRequest
0 голосов
/ 26 июля 2011

Мой код DataGrid XAML

1- Я хочу иметь возможность добавлять новые строки и доступ к данным одного столбца DataGrid, япытался использовать Name prop, но он не работает ...

2- После этого, чтобы добавить новую строку, мне просто нужно вызвать метод Add dataGrid.Items?Чем я кормлю этот метод?Создайте класс с характеристиками, представляющими столбцы, например: здесь ?

3- У меня есть столбец с именем «Nota», как мне получить доступ к данным этогостолбец в каждой строке?

Заранее спасибо,

-A

1 Ответ

0 голосов
/ 26 июля 2011

1. Вы не можете получить доступ к сетке по имени, так как существует несколько динамических сеток и не может быть несколько полей с одинаковым именем (конечно, это не поможет, если это возможно).

2. Вы не можете изменить Items, пока ItemsSource связан, но вы можете изменить 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. Манипуляции с объектной моделью документа - это боль только с точки зрения дополнительных строк кода, они ни в коей мере не являются безопасными, не имеют формы или формы, и их нужно поддерживать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...