我有一个有趣的情况,我无法自己解决。我双击dataGrid并有一个消息框显示行的文本。不幸的是,我一次只能得到一个单元格?
XAML:
<Window x:Class="WpfApplication7.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="NAME SELECT"
SizeToContent="WidthAndHeight" Height="238.968"
>
<Grid Width="337" >
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<DataGrid x:Name="selectDataGrid" HorizontalAlignment="Left" Width="333" AutoGenerateColumns="False" Margin="0,0,0,117" >
<DataGrid.Columns>
<DataGridTextColumn Header="FIRST NAME" Width="125" Binding="{Binding FNAME}"/>
<DataGridTextColumn Header="LAST NAME" Width="125" Binding="{Binding LNAME}"/>
</DataGrid.Columns>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<EventSetter Event="MouseDoubleClick" Handler="selectDataGrid_MouseDoubleClick_1" />
</Style>
</DataGrid.RowStyle>
</DataGrid>
<TextBox x:Name="tbTest" HorizontalAlignment="Left" Height="23" Margin="147,176,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
<TextBox x:Name="tbTest2" HorizontalAlignment="Left" Height="23" Margin="10,176,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
</Grid>
C#:
private void selectDataGrid_MouseDoubleClick_1(object sender, MouseButtonEventArgs e)
{
if (sender != null)
{
var row = (DataGridRow)sender;
TextBlock myTextBlock = selectDataGrid.Columns[0].GetCellContent(selectDataGrid.CurrentItem) as TextBlock;
TextBlock myTextBlock1 = selectDataGrid.Columns[1].GetCellContent(selectDataGrid.CurrentItem) as TextBlock;
System.Windows.MessageBox.Show(myTextBlock.Text);
}
那么在这个例子中会发生什么: 如果我单击第二列(最后一个名称),消息框将显示第一列。如果我将消息框show更改为&#39; myTextBlock1&#39;然后通过单击第一列,消息框将显示第二列。令人沮丧。如果我尝试show(myTextBlock.Text + myTextBlock1.Text),我会得到一个说明null对象的异常。好像我需要同时点击两列???
我想单独使用这些值,理想情况下show(myTextBlock.Text + myTextBlock1.Text)会很好,因为我可以选择仅显示其中一个等等...
我觉得我很近,只是遗漏了一些非常明显的东西。我希望有人可以帮我解决这个问题,因为我昨晚整夜都在这里,而且这是。
更新:如果我按住ctrl并选择行中的两列,则show(myTextBlock.Text + myTextBlock1.Text)有效。我不确定如何强制它自动选择整行???
答案 0 :(得分:0)
希望这能节省一些时间:
这就是我所拥有的:
selectDataGrid.Columns[0].GetCellContent(selectDataGrid.CurrentItem)
这是有效的:
selectDataGrid.Columns[0].GetCellContent(selectDataGrid.SelectedItem)
这简直就像将CurrentItem更改为SelectedItem一样简单。生活和学习!