根据datagridview

时间:2017-09-03 21:06:57

标签: c# winforms datagridview

我尝试根据datagridview中的行的单元格值创建多个文本框,并使用每个值填充文本框。我有它所以它抓取到目前为止的所有数据(使用MessageBox.Show(textBox.text)),它显示为预期。但是,当我尝试创建文本框时,它只创建一个(我可以在Windows窗体应用程序中看到)。

以下是我点击事件的代码:

 qbcDataGridView.RowHeaderMouseClick += (object sender, DataGridViewCellMouseEventArgs e) =>
 {
     id = Convert.ToInt32(qbcDataGridView.Rows[e.RowIndex].Cells[0].Value.ToString());

     // get all the columns and assign them to textboxes text
     for (int i = 0; i < qbcDataGridView.Rows[e.RowIndex].Cells.Count; i++)
     {
          var textBox = new TextBox
          {
             Name = qbcDataGridView.Rows[e.RowIndex].Cells[i].Value.ToString(),

             Font = new Font(qbcDataGridView.Font.FontFamily, 12),

             Text = qbcDataGridView.Rows[e.RowIndex].Cells[i].Value.ToString(),

             Location = new Point(80, 50)
         };

         Controls.Add(textBox);

         // used for testing
         MessageBox.Show(textBox.Text);
     }
 };

以下是该计划的截图:

主屏幕 -

enter image description here

点击datagridview时的屏幕 -

enter image description here

(我注释掉MessageBox.Show(textBox.Text),但它显示3,jimmy,test,test,test,member)

我不知道它的for循环是否会覆盖自身,但这似乎不太可能,因为它通过消息框显示所有数据。我倾向于定位,但我并不完全确定。

任何帮助都将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

  

当我尝试创建文本框时,它只创建一个(我可以在Windows窗体应用程序中看到)。

因为文本框是重叠的。唯一可见的是ID单元格(因为它的z顺序是最高的)。

只需将它们分开,这样它们就不会彼此叠加:

Location = new Point(80 + (i * 50), 50)