WPF Datagrid自动生成的列

时间:2010-11-09 18:50:41

标签: wpf datagrid

我已将数据表绑定到WPF中的数据网格。现在点击网格中的一行我需要弹出一个窗口。但为此,我需要先将datagrid中的列更改为超链接。关于如何做到的任何想法?

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

如果我无法将自动生成的列更改为超链接,是否可以在每行中添加按钮?

由于 NIKHIL

2 个答案:

答案 0 :(得分:1)

因此,为自动生成的数据网格创建超链接列非常困难。我最终做的是这个 - 在运行中创建按钮到网格然后根据数据网格的自动生成事件附加路由事件,我将放置我的代码。我不希望我的代码被硬编码到列中,现在我可以灵活地通过动态更改数据表。这是代码:

 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

    }

答案 1 :(得分:0)

我认为您无法从自动生成的列中获取这些高级UI功能。我认为当你检索数据并根据自己喜欢的方式定制数据时,要么必须决定用C#或VB.NET编写这些列,或者你必须放弃你提到的UI想法。自动生成的列无法做到这一点。

但是,您可以改变您的方法。尝试检查像MouseLeftButtonDown等事件,看看你是否可以通过其他方式模拟你想要的行为。