WPF Datagrid автоматически сгенерированные колонны - PullRequest
0 голосов
/ 09 ноября 2010

Я связал данные с сеткой данных в WPF.Теперь при нажатии на строку в сетке мне нужно всплывающее окно.Но для этого мне нужно сначала изменить столбец в таблице данных, чтобы он стал гиперссылкой.Есть идеи, как это сделать?

<DataGrid Name="dgStep3Details" Grid.Column="1" Margin="8,39,7,8" IsReadOnly="True" ItemsSource="{Binding Mode=OneWay, ElementName=step3Window,Path=dsDetails}" />

Если я не могу изменить автоматически сгенерированный столбец на гиперссылку, есть ли способ вместо этого добавить кнопку в каждую строку?

Спасибо, Нихил

Ответы [ 2 ]

1 голос
/ 10 ноября 2010

Итак, было действительно трудно создать столбцы гиперссылок для автоматически сгенерированной таблицы данных.В конце концов я сделал следующее: создаю кнопки на сетке на лету, а затем присоединяю перенаправленное событие к тому же самому событию, основываясь на событии автогенерации сетки данных, куда я должен поместить свой код.Я не хотел, чтобы мой код был жестко закодирован в столбцах, и теперь я гибок, изменяя данные на лету.Вот код:

 private void dgStep3Details_AutoGeneratedColumns(object sender, EventArgs e)
    {

        DataGrid grid = sender as DataGrid;
        if (grid == null)
            return;
        DataGridTemplateColumn col = new DataGridTemplateColumn();
        col.Header = "More Details";
        FrameworkElementFactory myButton = new FrameworkElementFactory(typeof(Button), "btnMoreDetails");
        myButton.SetValue(Button.ContentProperty, "Details");
        myButton.AddHandler(Button.ClickEvent, new RoutedEventHandler(btnMoreDetails_Click));
        DataTemplate cellTempl = new DataTemplate();
        //myButton.SetValue(Button.CommandParameterProperty, ((System.Data.DataRowView)((dgStep3Details.Items).CurrentItem)).Row.ItemArray[0]);
        cellTempl.VisualTree = myButton;
        col.CellTemplate = cellTempl;
        dgStep3Details.Columns.Add(col);

    }
    public void btnMoreDetails_Click(object sender, RoutedEventArgs e)
    {
        //Button scrButton = e.Source as Button;
        string currentDetailsKey = ((System.Data.DataRowView)(dgStep3Details.Items[dgStep3Details.SelectedIndex])).Row.ItemArray[0].ToString();
        // Pass the details key to the new window

    }
0 голосов
/ 10 ноября 2010

Я не думаю, что вы сможете получить эти расширенные функции пользовательского интерфейса из автоматически сгенерированных столбцов.Я думаю, что вам придется либо программировать эти столбцы в C # или VB.NET, когда вы будете получать свои данные и адаптировать их так, как вам нравится, либо вам придется отказаться от упомянутых вами идей пользовательского интерфейса.Автоматически сгенерированные столбцы просто не могут этого сделать.

Однако вы можете изменить свой подход.Попробуйте проверить такие события, как MouseLeftButtonDown и т. Д., И посмотрите, сможете ли вы смоделировать поведение, которое вы хотите, другими способами.

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