簡體   English   中英

使用復選框列的Custom DataGrid選擇要輸入表的行

[英]Custom DataGrid using checkbox column to select rows to enter into table

我已經使用ria和MVVM構建了Silverlight應用程序。 我創建了一個承載數據網格的ChildWindow。 該數據網格當前加載我的<Book>表。 我自定義了數據網格以僅帶回書名,並添加了一個復選框列以選擇特定的書。 僅在用戶要多選書籍時彈出。

我的目標是讓用戶選擇他們想要的所有書,然后單擊“保存”按鈕,將那些書名和ID添加到與我的書表有關系的另一個表中。 book表包含書籍和書籍ID的列表,第二張表<JM>應該具有其自己的ID和用戶選擇的所有書籍。 這樣一來,當用戶想要搜索其書籍時,他們可以調用該書籍或選擇多個書籍,它將返回他們選擇的所有書籍。 簡單的東西。

但是,我目前無法將多本書添加到表格中。 由於我選擇的項目代碼,只輸入了一本書。

JobMarket jm = new JobMarket();
foreach (Book b in dataGrid1.SelectedItems)
{
    dataGrid1.SelectedItems.Add(b);
    jm.BookID = b.BookID;
    jm.Book = b.Book1;
}
_context.JobMarkets.Add(jm);
SubmitOperation s = _context.SubmitChanges();

this.DialogResult = true;

我之所以嘗試這種方法,是因為我認為selectedItems將返回所有selectedItems,但是它目前只是最后一個選中的項目。 由於我的復選框控件嵌套在datagrid中,因此無法通過代碼隱藏訪問它。 我知道有辦法,我只是不知道該怎么做。 我以為foreach會循環通過並找到復選框,但事實並非如此。

因此,我正在尋找一種方法來解決此問題並在此一鍵式事件中執行所有操作。 是否有一種簡單的方法可以在代碼后面使用類似於我自己的代碼(我的理解水平)來完成此操作,這也是xaml datagrid。

<sdk:DataGrid AutoGenerateColumns="False" Height="532" HorizontalAlignment="Left" Name="dataGrid1" VerticalAlignment="Top" >
    <sdk:DataGrid.Columns>
        <sdk:DataGridTemplateColumn Header="Add Book">
            <sdk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="chkAddBook" IsChecked="{Binding Book1, Mode=TwoWay}" />
                </DataTemplate>
            </sdk:DataGridTemplateColumn.CellTemplate>
        </sdk:DataGridTemplateColumn>
        <sdk:DataGridTemplateColumn Header="Book">
            <sdk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Book1}" HorizontalAlignment="Center" VerticalAlignment="Center" Padding="12,3"  />
                </DataTemplate>
            </sdk:DataGridTemplateColumn.CellTemplate>
        </sdk:DataGridTemplateColumn>
    </sdk:DataGrid.Columns>
</sdk:DataGrid>

如果我對您的理解正確,則希望獲取用戶檢查過的所有書籍。

您可以將bool屬性IsChecked添加到Book類,並在Datagridcheckboxcolumn中創建對其的兩種方式綁定。 因此,以后您可以選擇已檢查的書籍。

如果您不希望使用此屬性擴展Book類,則可以使用所需的屬性為書籍創建包裝器,創建這些包裝器的集合並將其綁定到DataGrid。

<DataGrid ItemsSource="{Binding MyBooksCollection}">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Binding="{Binding Path=IsChecked, Mode=TwoWay}" />
    </DataGrid.Columns>
</DataGrid>

MyBooks集合應包含具有IsChecked屬性的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM