2013-02-08 55 views
1

我是WPF的新手。我將數據表綁定到我的wpf項目中的數據網格。我有我的DataGrid中的按鈕和按鈕單擊事件,我試圖找到GridViewRow。但是我將Grdrow1視爲null。GridViewRow在DataGrid中爲空

我的代碼:

<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的命名空間下面: -

using System.Web.UI.WebControls;

這是當前或任何其他我必須使用?

+0

如何將數據綁定到'DataGrid'? –

回答

0

首先,確保你不會混淆的DataGrid有一個GridView(中一個ListView)。看起來你的Xaml正在使用DataGrid,但是你正試圖將其轉換爲DataGrid中不存在的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 
} 
+0

嗨安德魯,謝謝你使用答案。你能提出任何解決方案來實現這一點通過使用WPF視覺樹。請幫忙。 –

+0

Mahesh,希望添加的代碼示例可以幫助您 – Andrew

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; 
    } 

你有行

+0

謝謝你的回答。但我想將DataRowView轉換爲GridViewRow,因爲我想從該行中找到控件。如何從網格視圖行查找控件。請幫幫我。 –

+0

@MaheshAlle是來自'WPFToolkit'的'DataGrid'嗎? –

+0

是的。我使用WPFTOOKIT。 –