如何将项目从Datagrid复制到列表框

时间:2013-06-14 11:12:28

标签: wpf c#-4.0

我有一个listbox,datagrid和一个Button。数据网格使用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

<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是表名。

2 个答案:

答案 0 :(得分:0)

如果您希望对象的实例进入列表框,则无法像以下那样控制tostring方法:

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

相反,将您的选择项投射到类型:

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

如果您不希望对象进入列表框,而只是进入该对象的某些属性,则必须覆盖对象中的tostring。如果你不这样做,tostring将为你提供对象的类型,就像你说的那样 - &gt; “HM.IFacility”

覆盖tostring,将其放在对象类中:

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

其中property1和property2是对象类的属性(如name,age或id)

答案 1 :(得分:0)

您还需要为listbox创建一个datatemplate。正如您为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的数据必须相同。