1

ツリービューからデータグリッドビューに一時的にデータをドロップしたいのですが、データグリッドビューにはすでにxmlファイルからデータがロードされています。

誰かこのメカニズムを教えてください。

これは私のドラッグ/ドロップ機能です://データグリッドビューにデータがない場合は完全に機能します。

  private void DataGridView1OnDragDrop(object sender, DragEventArgs e)
    {
        Point dscreen = new Point(e.X, e.Y);
        Point dclient = dataGridView1.PointToClient(dscreen);
        DataGridView.HitTestInfo hitTest = dataGridView1.HitTest(dclient.X, dclient.Y);

        if (hitTest.ColumnIndex == 0 && hitTest.Type == DataGridViewHitTestType.Cell)
        {
            e.Effect = DragDropEffects.Move;
            //dataGridView1.Rows.Insert(hitTest.RowIndex, "hitTest", "hitTest", "hitTest", "hitTest");
            var data = (object[]) e.Data.GetData(typeof(string[]));
            dataGridView1.Rows.Insert(hitTest.RowIndex, data);

        }
        else
        {
            e.Effect = DragDropEffects.None;
        }
        dataGridView1.AllowUserToAddRows = false;
    }

データグリッドの場合:

XmlReader xmlFile;
xmlFile = XmlReader.Create("Product.xml", new XmlReaderSettings());
DataSet ds = new DataSet();
ds.ReadXml(xmlFile);
dataGridView1.DataSource = ds.Tables[0];

Treeviewの場合:

var filename = @"C:\Check.xml";
//First, we'll load the Xml document
XmlDocument xDoc = new XmlDocument();
xDoc.Load(filename);
4

1 に答える 1

1

コントロールにドラッグドロップデータを追加する代わりに、コントロールのデータソースに追加する必要があります。

// will allow you to drop your data anywhere on gridview where a cell is
if (hitTest.Type == DataGridViewHitTestType.Cell)
{
   e.Effect = DragDropEffects.Move;
   var data = (object[])e.Data.GetData(typeof(string[]));

   // causes error - if there is already data bound to the control
   //   see image below
   //dataGridView1.Rows.Insert(hitTest.RowIndex, data);

   DataTable dt = (DataTable) dataGridView1.DataSource;
   DataRow dr = dt.NewRow();
   dr.ItemArray = data;
   dt.Rows.Add(dr);
}

DebugMode のエラー メッセージ

ここに画像の説明を入力

私にとってはうまくいきました-コードにエラーが表示された場合はお知らせください

于 2012-06-22T10:01:26.720 に答える