Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取选定的列表框项目_C#_Wpf_Listbox - Fatal编程技术网

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