我有一个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是表名。
答案 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的数据必须相同。