1

(devexpress)gridView行を別の形式で他のgridControlにコピーするにはどうすればよいですか?例を書いてください。これは子フォームです。

public partial class frmSelectInvoice : DevExpress.XtraEditors.XtraForm{

public ValinorEntities valinor;
public BindingSource src;

public frmSelectInvoice()
{
    InitializeComponent();

    using (this.valinor = new ValinorEntities())
    {
        this.valinor = new ValinorEntities();
        this.src = new BindingSource(valinor.invoices_head, null);
        gridControl1.DataSource = src;
        src.DataSource = valinor.invoices_head;
    }
}

private void button1_Click(object sender, EventArgs e)
{

    this.Close();
}

}

4

2 に答える 2

3

私も同じ痛みに苦しんでいました。最終的に私は解決策を開発することができ、それは問題なく機能します。独自のソリューションを構築するための基本的なコードを提供しました。あなたは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

よろしく。クシャンランディマ

于 2014-10-27T10:38:32.360 に答える
0

これは現在のコードです:

for (int i = 0; i < gridView2.RowCount; i++)
{
  gridView3.AddNewRow();              

  for (int ii = 0; ii < gridView3.Columns.Count; ii++)
  {
    gridView3.SetRowCellValue(gridView3.FocusedRowHandle, gridView3.Columns[ii], gridView2.GetRowCellValue(i, gridView2.Columns[ii]));
  }          
}

これを別の形式で他のgridControlにコピーするにはどうすればよいですか?

于 2013-02-19T10:03:39.230 に答える