2014-01-23 29 views
0

工具的ListView在C#中的设置位置: 的Visual Studio 2010旗舰版, 语言C#, MYSQL数据库以下的DataGridView活动行的Winform

嗨,

我正在寻找这一段时间,但至今没找不到合适的解决方案。

我有一个绑定DataGridView与5列,ProductID,ProductName,数量,价格和金额的窗体。正常数据输入后用户可以点击按钮将数据保存到Mysql数据库,那里没有问题。

目前用户手动输入ProductID,之后执行Sql命令来获取ProductName并将其设置为DataGridView ProductName列。我需要一种方法,当它获得焦点时在ProductID列下方显示ListView,以便用户可以从ListView中选择产品(产品ID和产品名称),并将其设置为用户当前正在使用的DataGridView的行。

当用户点击或获得焦点时,是否可以在ProductID单元格下方显示listview?

感谢

艾哈迈德

+0

参见[DataGridViewComboBoxColumn(http://msdn.microsoft.com/en-us/library/system.windows .forms.datagridviewcomboboxcolumn(v = vs.110).aspx) –

+0

@GrantWinney ListView的任何建议/链接? – Ahmed

+0

@ Ahmed你不能。 DataGridView不支持ListView列。你可以做的是手动创建并找到行所在的位置上的ListView控件。但是,您将不得不处理诸如滚动等情况。 – etaiso

回答

0

尝试下面的代码,我认为这是一个良好的开端 - 但肯定需要改进。但请不要这样,因为我在上面的评论中提到过,您应该处理特殊情况,例如滚动甚至扩展网格,以便ListView不会隐藏DataGridView行。

在您DataGridView认购MouseMove事件和存储鼠标位置:

private void dataGridView1_MouseMove(object sender, MouseEventArgs e) 
{ 
    mouseLoc = e.Location; 
} 

您可以设置mouseLoc作为一个属性。

private Point mouseLoc = new Point();

而且还订阅CellMouseDown事件,与此代码:

private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) 
{ 
    listView1.Location = new Point(mouseLoc.X, mouseLoc.Y + dataGridView1[e.ColumnIndex, e.RowIndex].Size.Height); 
    listView1.BringToFront(); 
    listView1.Refresh(); 
} 
+0

谢谢......我会尽快回复您。 – Ahmed