내 DataGrid에서 한 행을 복사 한 다음 복사하는 데 문제가 있습니다. 선택한 여러 행에 대해 원하는대로 잘 작동합니다. 그러나 한 행에 대해서.C# DataGrid에서 한 행 복사
valsCollection[i1] = string.Format("{0}\t{1}", cellcontent.Text, valsCollection[i1]);
내가 하나 개의 행을 선택했을 때이 오류가 발생했습니다 :
이이 특정 라인에서 이제 복사 행
/// <summary>
/// Method which will copy entire row.
/// </summary>
private void CopyRow(object obj)
{
var datagrid = obj as System.Windows.Controls.DataGrid;
List<string> valsCollection = new List<string>();
foreach (ENotifiedTruck item in datagrid.SelectedItems)
{
valsCollection.Add(item.ToStringLP());
}
var rows = GetDataGridRows(datagrid);
int i1 = 0;
foreach (DataGridRow r in rows)
{
DataGridColumn column = datagrid.Columns[0];
TextBlock cellcontent = column.GetCellContent(r) as TextBlock;
valsCollection[i1] = string.Format("{0}\t{1}", cellcontent.Text, valsCollection[i1]);
i1++;
}
datagrid.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
valsCollection.Insert(0, string.Empty);
ApplicationCommands.Copy.Execute(null, datagrid);
string oldresult = (string)Clipboard.GetData(DataFormats.Text);
List<string> rowCollection = new List<string>();
rowCollection = oldresult.Split(new char[] { '\n' }).ToList<string>();
if (rowCollection.Count == 0)
return;
string last = rowCollection[0];
rowCollection = new List<string>();
rowCollection.Add(last);
rowCollection.AddRange(valsCollection);
oldresult = string.Join("\n", rowCollection);
Clipboard.SetText($"{oldresult}");
}
public IEnumerable<DataGridRow> GetDataGridRows(System.Windows.Controls.DataGrid grid)
{
var itemsSource = grid.ItemsSource as IEnumerable;
if (null == itemsSource) yield return null;
foreach (var item in itemsSource)
{
var row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(item);
if (null != row) yield return row;
}
}
에 대한 코드입니다. 이것은 "mscorlib.dll에서 'System.ArgumentOutOfRangeException'유형의 처리되지 않은 예외가 발생했습니다."
아이디어가 있습니까? 감사 :]
아마도 foreach 문을 사용하여 valsCollection에 값을 추가하는 위치입니다. .SelectedItems를 사용하면 선택한 항목 하나를 선택하지 않아도되므로 콜렉션에 아무 것도 추가하지 않으므로 값을 가져 오려고 할 때 범위를 벗어납니다. – JohnChris
슬프게도, 나는 DataGrid.SelectedIndex를 반복 할 수 없다. 어쩌면 단지 내가 datagrid.SelectedIndex 만 사용하는 새로운 조건이 필요하지만 실제로는 확실하지 않습니다. –
SelectedIndex를 사용하여 테스트하고 작동하는지 확인하십시오. 단 하나만 반복하고, null인지 확인한 다음 목록에 추가 할 수 없습니다. – JohnChris