【问题标题】:Retrieve value of rows column that is databound检索数据绑定的行列的值
【发布时间】:2012-11-18 00:35:56
【问题描述】:

我有一个 DataGrid,我设置了一个调用方法的双击事件设置器。下面是我的 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());
    }

任何关于如何检索列值的想法或任何其他建议都非常受欢迎。我实在是太难过了。

【问题讨论】:

  • 这修复了它,供其他人搜索:(c# 方法)DataRowView row = OpenVehicles.SelectedItem as DataRowView; MessageBox.Show(row.Row["VehicleID"].ToString());

标签: c# wpf datagrid


【解决方案1】:

DataRowView.Row 属性将包含您想要的 DataRow。从那里您可以使用DataRowView.Row["ColumnName"] indexer 访问列值

【讨论】:

  • 谢谢!这将我推向了正确的方向。我是如此接近。对不起,我不能给你投票,没有足够的积分或其他什么。
  • 您仍然可以将此答案标记为已接受的答案meta.stackexchange.com/a/5235
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    目前您正在引用网格本身。 您的事件处理一行,因此请使用事件参数在所选行中查找您需要的内容(在调试中调查它们)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-03
      • 2011-12-09
      • 1970-01-01
      • 2015-02-08
      • 2023-03-28
      • 2012-08-06
      • 2011-11-22
      • 2021-04-04
      相关资源
      最近更新 更多