C# 获取选定的列表框项目
我已经玩了一天了,我打算放弃它。 基本上,重点是我得到了一个包含来自数据库的自定义对象(产品)的列表框。填充和排序可以工作,但无法从所选项目中获取值 产品类别:C# 获取选定的列表框项目,c#,wpf,listbox,C#,Wpf,Listbox,我已经玩了一天了,我打算放弃它。 基本上,重点是我得到了一个包含来自数据库的自定义对象(产品)的列表框。填充和排序可以工作,但无法从所选项目中获取值 产品类别: public class Product { //properties public int ID { get; set; } public String Name { get; set; } public String Info { get; set; } public int Stock { get; set; } publi
public class Product {
//properties
public int ID { get; set; }
public String Name { get; set; }
public String Info { get; set; }
public int Stock { get; set; }
public float Price { get; set; }
}
frmUser中列表框中的XAML:
<Window.Resources>
<DataTemplate x:Key="listBoxTemplate">
<StackPanel Margin="4">
<DockPanel >
<TextBlock FontWeight="Bold" Text="Product ID: " DockPanel.Dock="Left" Margin="5,0,10,0" Foreground="White" FontSize="13" />
<TextBlock Text="{Binding productId}" Foreground="White" />
</DockPanel>
<DockPanel >
<TextBlock FontWeight="Bold" Text="Naam: " DockPanel.Dock="Left" Margin="5,0,10,0" Foreground="White" FontSize="13"/>
<TextBlock Text="{Binding naam}" />
</DockPanel>
<DockPanel >
<TextBlock FontWeight="Bold" Text="Omschrijving: " DockPanel.Dock="Left" Margin="5,0,10,0" Foreground="White" FontSize="13"/>
<TextBlock Text="{Binding omschrijving}" />
</DockPanel>
<DockPanel >
<TextBlock FontWeight="Bold" Text="Voorraad: " DockPanel.Dock="Left" Margin="5,0,10,0" Foreground="White" FontSize="13"/>
<TextBlock Text="{Binding voorraad}" />
</DockPanel>
<DockPanel >
<TextBlock FontWeight="Bold" Text="Prijs: " DockPanel.Dock="Left" Margin="5,0,10,0" Foreground="White" FontSize="13"/>
<TextBlock Text="{Binding prijs}" />
</DockPanel>
</StackPanel>
</DataTemplate>
</Window.Resources>
现在,一旦用户单击按钮上的“购买”,我希望所选项目(如果选择了任何项目)被放置在一个列表或任何东西中,并读取价格。因此,我可以使用该值指定给总价标签。如果用户再次单击,请再次读取selecteditem中的价格,并将其与上一项相加。就这么简单。
但我无法在任何情况下获得listboxitems中“存储”的值,因为listboxitems基本上是“产品”对象
最后,我想使用“购买和选择的”项目将其ID存储回数据库中的tblOrders。这就是我需要ID和价格值的原因
我的解决方案是这样的:
ClassObjects.Product product = (ClassObjects.Product)lboxProducts.SelectedItem;
float price = product.Price;
//go on and sum or store the price blabla
但它给出了一个无法从DataRowView转换为ClassObjects的错误
感谢您的帮助!如果您使用
DataTables
获得这些包装,请先转换到DataRowView
并从那里获得产品(例如使用).与将itemSource设置为dataview不同,您可以尝试遍历从数据库检索到的行,为返回的每一行创建一个Product对象,并将其放入列表中。然后将itemSource设置为此列表。当您检索selectedItem时,它将是ClassObjects.Product类型,而不是da类型tarowview.你有没有一个小例子?@BETA911:我从来没有用过这些,可能是这样的:浮动价格=(浮动)行视图。项目[“价格”];
或“prijs”
当你绑定到它时。这一个工作得很好!现在的代码是:DataRowView=(DataRowView)lboxProducts.SelectedItem;int test=(int)view[“prijs”];MessageBox.Show(test.ToString());它显示了所选项目的价格。谢谢!我也这么想(但还没有尝试),但如果它能以这种方式工作,那就太好了。这就是为什么我还没有尝试它。好吧,我尝试了这种方法,但后来我看到了列表框,因为我得到了一个重写的ToString()方法。因此,所有的绑定也都是不必要的。但是如果我进一步研究它,它应该可以工作。
ClassObjects.Product product = (ClassObjects.Product)lboxProducts.SelectedItem;
float price = product.Price;
//go on and sum or store the price blabla