私も同じ痛みに苦しんでいました。最終的に私は解決策を開発することができ、それは問題なく機能します。独自のソリューションを構築するための基本的なコードを提供しました。あなたは2つのステップであなたの目標を達成することができます。
ステップ1:グリッドビューの行をクリップボードにコピーします[ctrl+cを押します]
ステップ2:クリップボード情報を別の(または同じ)グリッドビューに貼り付けます[Ctrl+Vを押します]
ステップ1:サンプルコード----------------
private void gridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.C)
{
Clipboard.SetText(GetSelectedValues(gridView1));
e.Handled = true;
}
}
private string GetSelectedValues(DevExpress.XtraGrid.Views.Grid.GridView view)
{
//validate selected row count
if (view.SelectedRowsCount == 0) return "";
const string CellDelimiter = "\t";
const string LineDelimiter = "\r\n";
string result = "";
//Iterate cells and compose a tab delimited string of cell values
for (int i = view.SelectedRowsCount - 1; i >= 0; i--)
{
int row = view.GetSelectedRows()[i];
for (int j = 0; j < view.VisibleColumns.Count; j++)
{
result += view.GetRowCellDisplayText(row, view.VisibleColumns[j]);
if (j != view.VisibleColumns.Count - 1)
result += CellDelimiter;
}
if (i != 0)
result += LineDelimiter;
}
return result;
}
*これで、選択した行がクリップボードにコピーされます。したがって、必要に応じて、これらの情報をExcelまたはメモ帳にコピーできます。ヒント:Ms.Excelは、常にメモ帳よりもスマートにコンテンツをフォーマットします。
ステップ2:サンプルコード----- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
//for retrieving clipboard data
string ClipboardData {
get {
IDataObject iData = Clipboard.GetDataObject();
if(iData == null) return "";
if(iData.GetDataPresent(DataFormats.Text))
return (string)iData.GetData(DataFormats.Text);
return "";
}
set { Clipboard.SetDataObject(value); }
}
DataTable tbl;
private void Form1_Load(object sender, System.EventArgs e) {
//create a datatable as the data-source for grid-control
tbl = new DataTable();
for(int i = 0; i < 3; i++)
tbl.Columns.Add("Column" + i.ToString());
for(int i = 0; i < 4; i++)
tbl.Rows.Add(new object[] { "Item" + i.ToString(), i, 3 - i });
gridControl1.DataSource = tbl;
}
//copy clip board infromation into the grid-view
private void simpleButton1_Click(object sender, System.EventArgs e) {
string[] data = ClipboardData.Split('\n');
if(data.Length < 1) return;
foreach(string row in data) {
AddRow(row);
}
}
void AddRow(string data) {
if(data == string.Empty) return;
string[] rowData = data.Split(new char[] { '\r', '\x09' });
DataRow newRow = tbl.NewRow();
for(int i = 0; i < rowData.Length; i++) {
if(i >= tbl.Columns.Count) break;
newRow[i] = rowData[i];
}
tbl.Rows.Add(newRow);
}
追加コード:(必要な場合)-------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
複数の行を選択する機能を提供する場合は、以下の例に示すように「MultiSelect」オプションを使用してください。
public fromLoad()
{
InitializeComponent();
gridView1.OptionsSelection.MultiSelect = true;
gridView1.OptionsSelection.MultiSelectMode = GridMultiSelectMode.RowSelect;
gridView1.OptionsBehavior.CopyToClipboardWithColumnHeaders = true;
}
CopyToClipboardメソッドの詳細については、次のリンクを参照してください
https://documentation.devexpress.com/#windowsforms/DevExpressXtraGridViewsBaseBaseView_CopyToClipboardtopic
よろしく。クシャンランディマ