Chia sẻ

Trong bài này csharpcanban.com sẽ hướng dẫn các bạn lấy index hiện tại của Row trên Listview. Việc này tưởng chừng dễ dàng như trên C#, nhưng không, trên WPF thì hoàn toàn khác.

Như các bạn thấy trên hình, ta đã lấy được giá trị của row trên listview khi nhấp chuột vào nốt bấm trên Row. Ta thực hiện theo các bước sau đây.

Bước 1: Thêm đoạn mã sau vào XAML

<Style TargetType="ListViewItem">
                <Style.Triggers>
                    <Trigger Property="IsKeyboardFocusWithin" Value="True">
                        <Setter Property="IsSelected" Value="True"/>

                    </Trigger>
                </Style.Triggers>
                <EventSetter Event="PreviewGotKeyboardFocus" Handler="SelectCurrentItem"/>
            </Style>

Bước 2: Thêm đoạn mã sau vào code C#

private void SelectCurrentItem(object sender, KeyboardFocusChangedEventArgs e)
    {                                                                            
        ListViewItem item = (ListViewItem)sender;
        item.IsSelected = true;

    }

Toàn bộ mã nguồn được mô tả như dưới đây:

<ListView x:Name="list_View" Grid.Column="2" Grid.Row="1" Margin="0,0,0,103">

        <ListView.Style>
            <Style TargetType="{x:Type ListView}">

                <Setter Property="BorderBrush" Value="Blue"/>
                <Setter Property="BorderThickness" Value="2"/>
                <Setter Property="Margin" Value="0"/>
            </Style>
        </ListView.Style>
        <ListView.Resources>
            <Style TargetType="ListViewItem">
                <Style.Triggers>
                    <Trigger Property="IsKeyboardFocusWithin" Value="True">
                        <Setter Property="IsSelected" Value="True"/>

                    </Trigger>
                </Style.Triggers>
                <EventSetter Event="PreviewGotKeyboardFocus" Handler="SelectCurrentItem"/>
                <Setter Property="Height" Value="30" />
                <Setter Property="BorderBrush" Value="Blue"/>
                <Setter Property="BorderThickness" Value="1"/>
                <Setter Property="Background" Value="#E7F8FE"/>
            </Style>

        </ListView.Resources>

        <ListView.View>

            <GridView>
                <GridViewColumn Header="Product Name"  Width="120"  DisplayMemberBinding="{Binding Product_Name}"/>
                <GridViewColumn Header="Unit Price" Width="70" DisplayMemberBinding="{Binding Unit_Price}"/>
                <GridViewColumn Header="Quantity" Width="50" DisplayMemberBinding="{Binding Quantity}"/>
                <GridViewColumn Header="Total"  Width="60" DisplayMemberBinding="{Binding Total}"  />
                <GridViewColumn Header="Delete"  Width="80">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Button Content="X" Width="60" Click="Delete_Item_In_Cart_Click" Name="btn_Delete_Item_In_Cart" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">

                            </Button>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

            </GridView>
        </ListView.View>

    </ListView>
private void SelectCurrentItem(object sender, KeyboardFocusChangedEventArgs e)
    {
        ListViewItem item = (ListViewItem)sender;
        item.IsSelected = true;

    }

private void Delete_Item_In_Cart_Click(object sender, RoutedEventArgs e)
{
    try
    {   
        int index =0;
        index = list_View.SelectedIndex;
        MessageBox.Show(index.ToString());

    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }  

}

Lưu ý: Sau khi nhấp vào button trên row, để tự động chọn row cần thêm đoạn mã sau

private void DeleteListItem(object sender, RoutedEventArgs e)
{
  var curItem = ((ListBoxItem)listView.ContainerFromElement((Button)sender));
  listView.SelectedItem = (ListBoxItem)curItem;
  MessageBox.Show($"Selected index = {listView.SelectedIndex}");
}

Chúc các bạn thành công.

 

ĐĂNG KÝ MUA HÀNG

    Email (*)

    Điện thoại (*)

    Tên sản phẩm/Dịch vụ:


    Chia sẻ
    Xem thêm  [C#] Hướng dẫn xây dựng ứng dụng đa cửa sổ MDI

    Trả lời

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *