1

我是 WPF 的新手。我在我的 wpf 项目中将数据表绑定到数据网格。我的 DataGrid 中有按钮,并且在按钮单击事件中,我试图找到 GridViewRow。但我将 Grdrow1 设为空。

我的代码:

<my:DataGrid Name="GridView1" ItemsSource="{Binding}" AutoGenerateColumns="False" >
    <my:DataGrid.Columns>
        <my:DataGridTemplateColumn Header="Vehicle Reg. No." Width="SizeToCells">
            <my:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Name="btnUserId" Cursor="Hand"  Click="btnUserId_Click" Content="{Binding Path=VehicleReg }" Style="{StaticResource LinkButton}"></Button>
                </DataTemplate>
            </my:DataGridTemplateColumn.CellTemplate>
        </my:DataGridTemplateColumn>
        <my:DataGridTextColumn Header="Vehicle Name"  Binding="{Binding Path=VehicleName}">
        </my:DataGridTextColumn>
    </my:DataGrid.Columns>
</my:DataGrid>

我的 C# 代码是:

private void btnUserId_Click(object sender, RoutedEventArgs e)
{            
    GridViewRow Grdrow1 = ((FrameworkElement)sender).DataContext as GridViewRow;
}

--------我的编辑帖子------

我为 GridViewRow 使用了以下命名空间:-

使用 System.Web.UI.WebControls;

这是当前的还是我必须使用的其他任何东西?

4

2 回答 2

0

在代码隐藏构造函数中:

    public Window1()
    {
        InitializeComponent();
        var dt = new DataTable();
        dt.Columns.Add("col1");
        dt.Columns.Add("col2");
        dt.Rows.Add("11", "12");
        dt.Rows.Add("21", "22");
        this.GridView1.DataContext = dt;
    }

btnUser_Click

    private void btnUserId_Click(object sender, RoutedEventArgs e)
    {
        var Grdrow1 = ((FrameworkElement)sender).DataContext as DataRowView;
    }

你得到了行

于 2013-02-08T07:11:40.027 回答
0

首先,请确保您没有将 DataGrid 与 GridView(ListView 的)混淆。似乎您的 Xaml 正在使用 DataGrid,但您试图转换为 DataGrids 中不存在的 GridViewRow。您可能正在寻找 DataGridRow。

然而,做出这种改变是不够的——你仍然会尝试一个不会成功的演员表。WPF 中 Click 事件的发送者只是用于连接事件处理程序的对象,在本例中为 Button。为了找到包含此 Button 的 DataGridRow,您必须沿着 WPF 可视化树向上走,直到使用 VisualTreeHelper 类找到它。

保持相同的 Xaml,这是我为 Click 事件处理程序提出的建议。请注意,发送者是按钮。从那开始,我们只需使用 VisualTree.GetParent 方法爬上可视树,直到找到第一个 DataGridRow 类型的对象。

private void btnUserId_Click(object sender, RoutedEventArgs e)
{            
    Button button = sender as Button;
    if (button == null)
        return;

    DataGridRow clickedRow = null;
    DependencyObject current = VisualTreeHelper.GetParent(button);

    while (clickedRow == null)
    {
        clickedRow = current as DataGridRow;
        current = VisualTreeHelper.GetParent(current);
    }

    // after the while-loop, clickedRow should be set to what you want
}
于 2013-02-08T07:41:36.257 回答