我试图以编程方式选择dataGrid上新添加的行。没有花哨的东西,没有MVVM,只是简单的代码背后。
无论我做什么,SelectedItem都保持为null - 我不知道这有什么问题。
XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid Name="dataGrid" AutoGenerateColumns="True"/>
</Grid>
</Window>
代码:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//source for dataGrid
DataTable dt = new DataTable();
dt.Columns.Add("one", typeof(string));
dt.Columns.Add("two", typeof(string));
//add new row
DataRow dr = dt.NewRow();
dr[0] = "uno";
dr[1] = "dos";
dt.Rows.Add(dr);
//select new row
dataGrid.SelectedItem = dr;
//here dataGrid.SelectedItem is still null, no row selected
dataGrid.ItemsSource = dt.AsDataView();
}
}
}
答案 0 :(得分:0)
dr还没有存在于dataGrid行中,将dt添加为itemssource然后设置所选行 ..
选中的行实际上是grid.Items中的对象,如果要将其设置为选中,请确保满足引用相等性。
答案 1 :(得分:0)
一个问题是,DataView
的项目属于DataRowView
类型,而您尝试将SelectedItem
设置为DataRow
的实例。您可以设置SelectedItem
,而不是设置SelectedIndex
。另一件事是设置选定的属性需要在设置ItemsSource
dataGrid.ItemsSource = dt.AsDataView();
dataGrid.SelectedIndex = 0;
//at this point dataGrid.SelectedItem is an instance of DataRowView