Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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# 选择listview项作为对象_C#_.net_Linq_Xaml_Dynamic Linq - Fatal编程技术网

C# 选择listview项作为对象

C# 选择listview项作为对象,c#,.net,linq,xaml,dynamic-linq,C#,.net,Linq,Xaml,Dynamic Linq,我得到了一个ListView控件,它也包含一个GridView控件。数据来自数据库的不同表 数据库方案: 图书(BookID、BookName、ISBN、CopyLeft) 借款人(借款ID、借款名称、借款级别) 交易记录(TransactionID、借入ID、BookID、借入日期、归还日期、IsReturned) 相应的类别分别是图书、借款人和交易。 GridViewfetches 交易ID,借用ID,借用名称,书名,借用日期和返回日期使用数据绑定从这些表中删除。 XAML代码: <

我得到了一个
ListView
控件,它也包含一个
GridView
控件。数据来自数据库的不同表 数据库方案:

  • 图书(BookID、BookName、ISBN、CopyLeft)
  • 借款人(借款ID、借款名称、借款级别)
  • 交易记录(TransactionID、借入ID、BookID、借入日期、归还日期、IsReturned) 相应的类别分别是
    图书
    借款人
    交易
    GridView
    fetches
    交易ID
    借用ID
    借用名称
    书名
    借用日期
    返回日期
    使用数据绑定从这些表中删除。 XAML代码:

     <Grid>
        <ListView Margin="15,57,58,57" Name="borrowedBookList" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding }" KeyDown="borrowedBookList_KeyDown">
            <ListView.View>
                <GridView>
                    <GridView.Columns>
                        <GridViewColumn  Width="80" Header="Borrower ID" DisplayMemberBinding="{Binding Path=BorrowerID}"/>
                        <GridViewColumn Width="220" Header="Borrower Name" DisplayMemberBinding="{Binding Path=BorrowerName}"/>
                        <GridViewColumn Width="220" Header="Book Name" DisplayMemberBinding="{Binding Path=BookName}"/>
                        <GridViewColumn Width="100" Header="Date" DisplayMemberBinding="{Binding Path=BorrowDate}"/>
                        <GridViewColumn Width="100" Header="Return Date" DisplayMemberBinding="{Binding Path=ReturnDate}"/>
                       </GridView.Columns>
                </GridView>
            </ListView.View>
        </ListView>
        <Label Content="Borrowed Book List" Height="34" HorizontalAlignment="Left" Margin="310,12,0,0" Name="label1" VerticalAlignment="Top" Width="151" />
        <Button Content="Close" Height="31" HorizontalAlignment="Left" Margin="636,535,0,0" Name="close" VerticalAlignment="Top" Width="106" Click="close_Click"/>
        <Button Content="Return This Book" Height="31" HorizontalAlignment="Left" Margin="454,535,0,0" Name="return" VerticalAlignment="Top" Width="115" Click="return_Click"/>
    </Grid>
    
    异常显示“对象引用未设置为对象的实例”。然后我尝试按如下方式查找借阅书目的类型:

    var selectedTran = this.borrowedBookList.selectedItem as Transaction;
    var selectedBook=this.borrowedBookList.selectedItem as Book;
    try
    {
        selectedBook.CopyLeft++;
        selectedTran.isReturned="YES";
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.message);
    }
    
    MessageBox.Show(borrowedBookList.SelectedItem.GetType().ToString());
    

    显示匿名类型。

    您的查询可能会导致匿名类型:

        var query = from b in ctx.books 
                    ... 
                    select new 
                    { BorrowerID = b.ID, BorrowerName = b.Name , ... 
                    }
    
    网格的selectedItem属性包含此类型,而不是原始实体类。因此,我将使用一个命名类,其中应包含主键ID,并使用所选项中的主键更新相应的实体:

    public class ForYourGrid
    {
        public int BorrowerID { get; set; }
        public string BorrowerName { get; set; }
    ...
    }
    
        var query2 = from b in ctx.books 
                    ... 
                    select new ForYourGrid 
                    { BorrowerID = b.ID, BorrowerName = b.Name , ... 
                    }
    
    
        var selected = this.borrowedBookList.selectedItem as ForYourGrid;
    
        var selectedTran = ctx.Transactions.SingleOrDefault(e => e.TransactionID == selected.TransactionID);
        selectedTran.isReturned = "YES";
    
        var selectedBook = ctx.Books.SingleOrDefault(e => e.BookID == selected.BookID);
        selectedBook.CopyLeft++;
    
        ctx.SaveChanges();
    

    CopyLeft是Book类的整数类型变量。