1

我有一个列表框、数据网格和一个按钮。数据网格中填充了来自 MS SQL 的数据。我希望能够使用按钮将所选项目从数据网格复制到列表框。按钮后面的代码是

 private void btnAdd_click(object sender, RoutedEventArgs e)
    {

        lstSelected.Items.Add(iFacilitiesDataGrid.SelectedItem.ToString());

    }  
  //List Box in xaml
 <ListBox Grid.Column="2" Grid.Row="1" Grid.RowSpan="7" Height="258" HorizontalAlignment="Left" Margin="0,4,0,0" Name="lstSelected" VerticalAlignment="Top" Width="236" />    

对于数据网格

<DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" Grid.Column="2" Grid.Row="1" Grid.RowSpan="7" Height="244" HorizontalAlignment="Left" ItemsSource="{Binding Source={StaticResource iLocationICategoriesIFacilitiesViewSource}}" Margin="291,5,0,0" Name="iFacilitiesDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" VerticalAlignment="Top" Width="247">
        <DataGrid.Columns>                
            <DataGridTemplateColumn x:Name="facilityNameColumn" Header="Facility Name" Width="150">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=FacilityName}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn x:Name="priceColumn" Binding="{Binding Path=Price}" Header="Price" Width="100" />

        </DataGrid.Columns>
    </DataGrid>       

每当我尝试在列表框上添加项目时,传递给列表框的项目是“HM.IFacility”,其中 HM 是项目名称,IFacility 是表名称。

4

2 回答 2

0

如果你想让对象的实例进入列表框,你不能像你这样控制 tostring 方法:

lstSelected.Items.Add(iFacilitiesDataGrid.SelectedItem.ToString());

相反,将您选择的项目转换为类型:

lstSelected.Items.Add((HM.IFacility)iFacilitiesDataGrid.SelectedItem);

如果您不希望对象进入列表框,而只是该对象的一些属性,那么您必须覆盖对象中的 tostring。如果你不这样做,tostring 会给你对象的类型,就像你说的那样——>“HM.IFacility”

要覆盖 tostring,请将其放在您的对象类中:

public override string ToString() 
  {
     return property1 + " " + property2
  }

其中 property1 和 property2 是对象类的属性(如姓名、年龄或 id)

于 2013-06-14T11:21:20.270 回答
0

您还需要为列表框创建一个数据模板。正如您为 DataGrid 创建的那样。用以下一个替换您的列表框,然后重试。

<ListBox Grid.Column="2" Grid.Row="1" Grid.RowSpan="7" Height="258" HorizontalAlignment="Left" Margin="0,4,0,0" Name="lstSelected" VerticalAlignment="Top" Width="236" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=FacilityName}" />
                </DataTemplate>
            </ListBox.ItemTemplate>            
        </ListBox>

条件: DataGrid 和 ListBox 的数据必须是相同的类型。

于 2013-06-14T11:38:58.717 回答