2012-07-24 131 views
1
<UserControl x:Class="DDCUI.CommDiagnosisWPFCtrl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" Height="800" Width="300"> 
    <StackPanel> 
     <DataGrid MinHeight="300" MaxHeight="600" AutoGenerateColumns="False" Name="DGComm" CanUserResizeColumns="True" IsReadOnly="True" ItemsSource="{Binding Source=dataGridRows}"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="No." Binding="{Binding Number}" Width="0.1*"/> 
       <DataGridTextColumn Header="Time" Binding="{Binding Time}" Width="0.1*" /> 
       <DataGridTextColumn Header="Protocol" Binding="{Binding Protocol}" Width="0.15*" /> 
       <DataGridTextColumn Header="Source" Binding="{Binding Source}" Width="0.15*" /> 
       <DataGridTextColumn Header="Destination" Binding="{Binding Destination}" Width="0.15*" /> 
       <DataGridTextColumn Header="Data" Binding="{Binding Data}" Width="0.5*" /> 
      </DataGrid.Columns> 
     </DataGrid> 
     <RichTextBox Height="150" Name="RtbHexCode"/> 
     <TreeView Height="200" Name="TreeViewDecode"/> 

    </StackPanel> 
</UserControl> 
private void DGComm_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) 
{ 
    //e.AddedCells[0].Column 
    IList<DataGridCellInfo> cells = e.AddedCells; 
    foreach (DataGridCellInfo di in cells) 
    { 
     DataRowView dvr = (DataRowView)di.Item; 
     MessageBox.Show(di.ToString()); 
    } 
} 

我希望能夠操縱選定單元格。我試圖打印單擊的單元格的名稱,但它在DataRowView dvr =(DataRowView)di.Item上拋出無效的轉換異常;指出我無法將數據源轉換爲RowView。DataGrid單元格Click事件

我該如何解決這個問題?

編輯:Itemsources由

public ObservableCollection<object> dataGridRows = new ObservableCollection<object>(); 

private void InitProtocolParsers() 
     { 
      DGComm.ItemsSource = dataGridRows; 
+0

你如何將Itemsource提供給datagrid? – 2012-07-24 02:53:51

回答

3

您通過di.Item訪問對象的類型是DataRowView,但你結合實際業務對象沒有提供。 所以無論你放在ObservableCollection<object>可以通過di.Item"訪問。

試試看

MessageBox.Show(di.Item.ToString()) 

,這將變得比較清楚,我希望。