DataGridView中的文本框控件

时间:2009-05-16 05:57:11

标签: c# winforms datagridview

我正在使用Windows应用程序中的C#中的datagridview。我想在DataGridView中添加文本框控件。因此,当我们运行它时,文本框应该显示在gridview中,我们可以在其中放置值,我的网格有3列,当我在gridview的第3列上按Tab键时,我想在网格中添加新行。

我该怎么做?

3 个答案:

答案 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;
}

如果还有其他问题,请随时问我:)