以编程方式在Listview中选择项目,该项目绑定到一个数据表,默认情况下是有序的

本文关键字:项目 数据表 一个 默认 情况下 Listview 方式 编程 选择 绑定 | 更新日期: 2023-09-27 18:10:04

我有一个数据表,它被绑定到一个listview

列表视图。ItemsSource = datatable.DefaultView;和datatable.DefaultView.Sort = "st DESC";

当我改变"st"被排序并立即反映到UI…

如何以编程方式选择列表视图项?

我试过这个,但它不工作,它选择了一个不同的项目:

string query = "id = " + "'" + ID.ToString() + "'";
DataRow[] _row = datatable.Select(query);
if (_row.Length > 0)
{
      DataRow row = _row[0];
      int index = datatable.Rows.IndexOf(row);
      listview.SelectedIndex = index;
}

以编程方式在Listview中选择项目,该项目绑定到一个数据表,默认情况下是有序的

在cs文件中试试:

public MainWindow()
{
    InitializeComponent();
    _datatable1 = new DataTable();
    _datatable1.Columns.Add(new DataColumn("id", typeof(int)));
    _datatable1.Columns.Add(new DataColumn("name", typeof(string)));
    _datatable1.Columns.Add(new DataColumn("st", typeof(int)));
    _datatable1.DefaultView.Sort = "st DESC";
    LsVTest.ItemsSource = _datatable1.DefaultView;
    _datatable1.Rows.Add(1, "row1", 6);
    _datatable1.Rows.Add(2, "row2", 2);
    _datatable1.Rows.Add(3, "row3", 8);
    _datatable1.Rows.Add(4, "row4", 4);
    _datatable1.Rows.Add(5, "row5", 9);
    _datatable1.Rows.Add(6, "row6", 6);
    _datatable1 = _datatable1.DefaultView.ToTable();
    _datatable1.DefaultView.Sort = "st DESC";
    LsVTest.ItemsSource = _datatable1.DefaultView;
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
    var query = "id=3";
    var rows = _datatable1.Select(query);
    if (rows.Length <= 0) return;
    var row = rows[0];
    var index = _datatable1.Rows.IndexOf(row);
    LsVTest.SelectedIndex = index;
}
private void ButtonBase_OnClick1(object sender, RoutedEventArgs e)
{
    DataRow[] Rows = _datatable1.Select("id=" + 3);
    Rows[0]["st"] = 10;
    _datatable1 = _datatable1.DefaultView.ToTable();
    _datatable1.DefaultView.Sort = "st DESC";
    LsVTest.ItemsSource = _datatable1.DefaultView;
}

我真的不知道你在做什么,但是,这里有一个完美的例子:

视图:

    <Grid>
            <StackPanel>
            <ListView x:Name="LsVTest">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="id" DisplayMemberBinding="{Binding Path=id}"/>
                        <GridViewColumn Header="name" DisplayMemberBinding="{Binding Path=name}"/>
                        <GridViewColumn Header="st" DisplayMemberBinding="{Binding Path=st}"/>
                    </GridView>
                </ListView.View>
            </ListView>
            <Button Content="Select row2" Click="ButtonBase_OnClick">
</Button>
    <Button Content="Change values" Click="ButtonBase_OnClick1"></Button>
            </StackPanel>
        </Grid>

代码:

public partial class MainWindow
{
    private DataTable _datatable1;
    public MainWindow()
    {
        InitializeComponent();
        _datatable1 = new DataTable();
        _datatable1.Columns.Add(new DataColumn("id", typeof(int)));
        _datatable1.Columns.Add(new DataColumn("name", typeof(string)));
        _datatable1.Columns.Add(new DataColumn("st", typeof(string)));
        _datatable1.Rows.Add(1, "row1", "st1");
        _datatable1.Rows.Add(2, "row2", "st2");
        _datatable1.Rows.Add(3, "row3", "st3");
        _datatable1.Rows.Add(4, "row4", "st4");
        _datatable1.Rows.Add(5, "row5", "st5");
        _datatable1.Rows.Add(6, "row6", "st6");
        _datatable1.DefaultView.Sort = "st DESC";
        LsVTest.ItemsSource = _datatable1.DefaultView;
    }
    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        var query = "id=2" ;
        var rows = _datatable1.Select(query);
        if (rows.Length <= 0) return;
        var row = rows[0];
        var index = _datatable1.Rows.IndexOf(row);
        LsVTest.SelectedIndex = index;
    }
    private void ButtonBase_OnClick1(object sender, RoutedEventArgs e)
    {
        _datatable1.Rows[3][0]= 6;
        _datatable1.Rows[3][1] = "row6";
        _datatable1.Rows[3][2] = "st6";
        LsVTest.ItemsSource = _datatable1.DefaultView;
    }
}
编辑:

还可以