2012-11-18 89 views
2

我有一個DataGrid,我已經設置了一個調用方法的doubleclick事件調用程序。下面是我的xaml,接下來是我的代碼隱藏頁面。雙擊事件的作品,但我得到的回報是「system.data.datarowview」,我不知道爲什麼。我試圖獲取隱藏自己列的行的「vehicleID」值。檢索數據綁定行列的值

XAML:

<DataGrid Name="OpenVehicles" AutoGenerateColumns="False" IsReadOnly="False" SelectedItem="{Binding vehicleID}" SelectionUnit="FullRow"> 
<DataGrid.ItemContainerStyle> 
    <Style TargetType="DataGridRow"> 
     <EventSetter Event="MouseDoubleClick" Handler="OpenVehicleClick" /> 
    </Style> 
</DataGrid.ItemContainerStyle> 
<DataGrid.Columns> 
    <DataGridTextColumn Binding="{Binding vehicleID}" Width="*" Header="vehicleID" Visibility="Hidden"/> 
    <DataGridTextColumn Binding="{Binding date, StringFormat=\{0:MMM dd yyyy \}}" Width="*" Header="Date"/> 
    <DataGridTextColumn Binding="{Binding companyshortname}" Width="*" Header="Customer"/> 
    <DataGridTextColumn Binding="{Binding subject}" Width="5*" Header="Vehicle Description"/> 
    <DataGridTextColumn Binding="{Binding FName}" Width="*" Header="Owner"/> 
</DataGrid.Columns> 

C#代碼:

 private void OpenVehicleClick(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show(OpenVehicles.CurrentCell.Item.ToString()); 
    } 

如何檢索列值或其他任何建議,非常歡迎任何想法。我無法抗拒。

+0

這固定它,爲其他人搜索:(c#方法) DataRowView row = OpenVehicles.SelectedItem作爲DataRowView; MessageBox.Show(row.Row [「VehicleID」] .ToString()); – getintanked

回答

1

DataRowView.Row屬性將包含您想要的DataRow。從那裏您可以使用DataRowView.Row["ColumnName"]索引器訪問列值

+0

謝謝!這讓我朝着正確的方向前進。我很親密。對不起,我不能upvote你,沒有足夠的分數或任何。 – getintanked

+0

您仍然可以將此答案標記爲您接受的答案http://meta.stackexchange.com/a/5235 –

0

當前您正在接觸網格本身。 您的事件處理一行,因此請使用事件參數在選定行中查找您需要的內容(在調試中調查它們)。

1

XAML中的這一位:SelectedItem="{Binding vehicleID}"表示所選數據項將綁定到網格的DataContext的屬性vehicleID(它將從它所在的控件/頁面繼承)。

我注意到你已經排除了網格上任何一個ItemsSource的提及 - vehicleID屬性應該與ItemSource屬性在同一個類中。你需要確保vehicleID是一個公共財產,而不是一個領域 - 你不能綁定到一個領域。所以,這裏是一對夫婦的這取決於你設置好了的方式選擇:

pubic class MyPage 
{ 
    public MyPage() 
    { 
     InitializeComponent(); 
     this.DataContext = this; 
    } 

    private void OpenVehicleClick(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show(VehicleID != null ? VehicleID.WhateverProperty : "Nothing selected"); 
    } 

    public MyDataObject VehicleID { get; set; } 
} 

,或者如果你有分配給網頁/控制的DataContext的一個單獨的視圖模型:

private void OpenVehicleClick(object sender, RoutedEventArgs e) 
{ 
    var selectedDataItem = ((MyViewModel) DataContext).VehicleID; 
    MessageBox.Show(selectedDataItem != null ? selectedDataItem.WhateverProperty : "Nothing selected"); 
}