在WPF開發過程中,DataGrid控件可謂是十分方便,用於綁定DataTable和List的數據很好用,內部提供了許多方法使用,相對Winform的DataGridView樣式也多很多,是經常用到的數據顯示控件。
但是唯一的不足,是WPF中的DataGrid沒有直接獲取選中行行號的方法,可能有的人說可以通過SelectedIndex來獲取,但是如果選擇多行時,想要獲取所有選中行的行號就不行了。選中多行時,可以獲取選中行的對象,但是不能直接獲取到所有選中行的行號。
之前過於執着,一直尋找直接獲取選中多行時每行的行號,最終無果,最近偶然想到,雖然不能直接獲取到,但是可以通過其他方式獲取。即先獲取到選中行的對象,然後通過對象在用IndexOf來獲取對象的行號即可,代碼如下:
private List<int> selectedIndex = null;
/// <summary>
/// 右鍵匹配,鼠標按下的時間:獲取選中行的行索引
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SysData_MouseDown(object sender, MouseButtonEventArgs e)
{
int startindex = this.SysData.SelectedIndex;
if (startindex == -1)
{
selectedIndex = null;
return;
}
var selectedRows = this.SysData.SelectedItems;
ItemCollection dvgitems = this.SysData.Items;
selectedIndex = new List<int>();
foreach (var sltitem in selectedRows)
{
int rindex = dvgitems.IndexOf(sltitem);
selectedIndex.Add(rindex);
}
if (selectedIndex.Count == 0) selectedIndex = null;
}
通過該方法即可即便的獲取到選中多行時的所有行行號,問題終於解決,希望對大家有所幫助.