1

我想暂时将一些数据从树视图放到 datagridview 中,但是 datagrid 视图已经从 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];

对于树视图:

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 回答