1

私はWPFが初めてです。私のwpfプロジェクトでデータテーブルをデータグリッドにバインドしています。DataGrid にボタンがあり、ボタン クリック イベントで、GridViewRow を見つけようとしています。しかし、私はGrdrow1をnullとして取得しています。

私のコード:

<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 と (ListView の) GridView を混同していないことを確認してください。Xaml は DataGrid を使用しているようですが、DataGrids に存在しない GridViewRow にキャストしようとしています。代わりに DataGridRow を探している可能性があります。

ただし、この変更を行うだけでは十分ではありません。成功しないキャストを試行することになります。WPF の Click イベントの送信者は、イベント ハンドラー (この場合は Button) をフックするために使用されたオブジェクトです。このボタンを含む DataGridRow を見つけるには、VisualTreeHelper クラスを使用して見つかるまで WPF ビジュアル ツリーをたどる必要があります。

同じ Xaml を使用して、Click イベント ハンドラーについて提案するのは次のとおりです。送信者がボタンであることに注意してください。そこから始めて、DataGridRow 型の最初のオブジェクトが見つかるまで、VisualTree.GetParent メソッドを使用してビジュアル ツリーを上っていきます。

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 に答える