使用c#windows form应用程序在datagridview中拖放

时间:2015-10-31 08:48:05

标签: c# winforms datagridview

这是我的项目。为此我需要从listBox拖动数据并将其放到datagridview单元格。因为我需要让消息框包含droped row phone_number。

我完成了拖放选项,但我不知道如何使用droped row phone_number获取消息框。

我将datagridview和listbox连接到数据库

我的编码是:

    private void listBox3_MouseDown(object sender, MouseEventArgs e)
    {
        listBox3.DoDragDrop(listBox3.SelectedItem, DragDropEffects.Copy);
    }
    private void dataGridView1_DragEnter_1(object sender, DragEventArgs e)
    {

        {
            if (e.Data.GetDataPresent(typeof(System.String)))
                e.Effect = DragDropEffects.Copy;
            else
                e.Effect = DragDropEffects.None;
        }
    }private void dataGridView1_DragDrop_1(object sender, DragEventArgs e)
    {

        if (e.Data.GetDataPresent(typeof(string)))
        {
            string dgv = dataGridView1.Columns[4].HeaderText == "phone_number" && is string;
            MessageBox.Show("data is "+ dgv);
    }
}

我尝试了很多,但它不起作用。请帮我编码。

1 个答案:

答案 0 :(得分:3)

我认为你的Listbox.Items包含一个字符串列表,如果是这样的话,那么你就错过了一个调用来有效地检索从列表框中拖出来的数据并显示数据,而不是一个内容。网格标题

private void dataGridView1_DragDrop_1(object sender, DragEventArgs e)
{

    if (e.Data.GetDataPresent(typeof(string)))
    {
        string item = (string)e.Data.GetData(typeof(System.String));
        MessageBox.Show("data is "+ item);

    }
}

现在,如果我理解您要实现的目标,则需要设置已删除单元格的内容,但前提是该单元格列的标题为" phone_number"。

在这种情况下,您必须将DragDrop事件中传递的光标坐标转换为相对于网格的坐标。之后,您应该使用网格的HitTest方法向网格询问已点击的元素。如果它是一个单元格,您可以轻松发现该单元格是否与所需的列相符。

private void dataGridView1_DragDrop_1(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(typeof(string)))
    {
        DataGridView dgv = sender as DataGridView;
        string item = (string)e.Data.GetData(typeof(System.String));

        // Conversion in coordinates relative to the data
        Point clientPoint = dgv.PointToClient(new Point(e.X, e.Y));

        // get the element under the drop coordinates
        DataGridView.HitTestInfo info = dgv.HitTest(clientPoint.X, clientPoint.Y);

        // If it is a cell....
        if (info.Type == DataGridViewHitTestType.Cell)
        {
            // and its column's header is the required one....
            if(dgv.Columns[info.ColumnIndex].HeaderText == "phone_number")
                dgv.Rows[info.RowIndex].Cells[info.ColumnIndex].Value = item;
        }
    }
}