我正在使用Windows应用程序中的C#中的datagridview。我想在DataGridView中添加文本框控件。因此,当我们运行它时,文本框应该显示在gridview中,我们可以在其中放置值,我的网格有3列,当我在gridview的第3列上按Tab键时,我想在网格中添加新行。
我该怎么做?
答案 0 :(得分:2)
很难提供准确的答案,因为您的问题缺乏细节且非常一般,但要在DataGridView
中获取文本框,您将需要添加DataGridViewTextBoxColumn
的一些实例DataGridView
的{{1}}集合。这将导致它们在每行中填充文本框。
要检测用户何时按下第3列上的标签,您可以使用Columns
事件添加1-2像素宽的第四列,并检测它是否已收到焦点(几乎绝对来自标签击键)。
答案 1 :(得分:0)
因此,对于“显示问题默认部分的文本框,这里是瘦的:
在GridView->编辑列上,添加要明确使用的列。然后单击“将此字段转换为templateField”链接。这将允许您调整为这些单元格生成的HTML。说OK。然后转到GridView->编辑模板。对于您最喜欢的列,将ItemEditTemplate复制到ItemTemplate中。 (ItemTemplate是默认值.ItemEditTemplate包含正确绑定的编辑控件。)现在,您的所有数据字段都将默认为“可编辑”。
我猜你有一个提交按钮。您需要告诉GridView更新提交的行,如下所示:
For Each r As GridViewRow In GridView1.Rows
Dim mon = System.Int32.Parse(CType(r.FindControl("TextBox1"), TextBox).Text)
If mon <> 0 Then GridView1.UpdateRow(r.RowIndex, False)
Next
显然,你需要不同的逻辑,但应该应用基本的循环/ findControl / updateRow逻辑。
Microsoft在此处对此进行了演练:Performing Bulk Updates to Rows Bound to a GridView
答案 2 :(得分:0)
例如,如果您要将datagridview
中的第一列设置为textbox
控件,请尝试以下操作:
private void dtgrdview_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0)
{
TextBox txtbox1=new TextBox();
dtgrdview.Controls.Add(txtbox1);
Rectangle rectangle = dtgrdview.GetCellDisplayRectangle(0, e.RowIndex, true);
txtbox1.Location = rectangle.Location;
txtbox1.Size = rectangle.Size;
txtbox1.TextChanged += txtbox1_TextChanged;
txtbox1.Leave += txtbox1_Leave;
txtbox1.Visible = true;
}
}
别忘了将此事件添加到如下所示的同一类中,以便在单元格具有焦点时调用该事件:
private void txtbox1_Leave(object sender, EventArgs e)
{
txtbox1.Visible = false;
}
private void txtbox1_TextChanged(object sender, EventArgs e)
{
dtgrdview.CurrentCell.Value = txtbox1.Text;
}
如果还有其他问题,请随时问我:)