以编程方式在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;
}
在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;
}
}
编辑:还可以