如何在VB.NET中向DataTable添加新行

33

我有一个带有文本框和“添加”按钮的表单。

  1. 用户可以在文本框中输入名称,然后单击“添加”按钮。它将保存在一个datatable中,其中包含自动ID。
  2. 之后,文本框被清空,用户可以在文本框中再次输入另一个名称并单击该按钮。
  3. 这将添加到内存中现有ID + 1的现有datatable中。
  4. 然后在gridview中显示。(这只是为了显示目的以确认其是否有效)

我有一个像这样的datatable。

    Button1.click() event

    Dim name = txtname.Text
    Dim dt As New DataTable
    dt.Columns.Add("ID", GetType(Integer))
    dt.Columns.Add("Name", GetType(String))
    Dim N As Integer = dt.Columns("ID").AutoIncrement
    dt.Rows.Add(N, name)
    GridView1.DataSource = dt
    GridView1.DataBind()
    txtname.Text = ""

目前我有类似上面代码的东西。在真正的程序中,它不仅仅是名称,也不仅仅是一个数据表,所以我只是模拟了一些代码。

这段代码是用于aspx的。

        <asp:TextBox ID="txtname" runat="server">
        </asp:TextBox><asp:Button ID="Button1" runat="server" Text="Button" />
        <asp:GridView ID="GridView1" runat="server">
        </asp:GridView>

有没有人可以给我建议,如何做到这一点?我知道我的代码很烂,不正确,但我只是需要放一些代码,这样你们就不需要从头开始为我工作。

非常感谢。


2
我简直不敢相信我问了这个问题 :( - Laurence
2个回答

52

下面是一个使用AutoIncrement在第一列添加新行到datatable的例子:

定义表结构:

    Dim dt As New DataTable
    dt.Columns.Add("ID")
    dt.Columns.Add("Name")
    dt.Columns(0).AutoIncrement = True

添加新行:

    Dim R As DataRow = dt.NewRow
    R("Name") = txtName.Text
    dt.Rows.Add(R)
    DataGridView1.DataSource = dt

它会添加名称,但会替换行(0)上的先前名称。 - Laurence
如果您有先前需要保留的数据,则不要在按钮点击事件中定义数据表,而是将其保留在更广泛的范围内。这样,您可以添加新的数据,而不必调用New并删除所有先前的数据。如果使用类级别的“Private dt as datatable”,则可以在加载时(但不是在回传时)某处定义结构,并在按钮单击中向dt添加行,它不会首先清除所有现有信息。 - Jay
亲爱的 D,谢谢,现在它可以工作了。问题是我把它放在“按钮单击”事件上,当然,它每次都会清除并创建新的DT,我是多么愚蠢啊 :D ... 谢谢你的回答,这将为我开发真正的程序提供很好的起点。祝你好运! - Laurence
2
哎呀,我居然问了这个问题...现在看起来好傻啊。 - Laurence

8

首先,您需要定义数据表的结构如下:

Dim dt As New DataTable
dt.Columns.Add("ID", Type.GetType("System.String"))
dt.Columns.Add("Name",Type.GetType("System.String"))

然后像这样添加行:
Dim dr As DataRow = dt.NewRow
dr("ID") = System.GUID.NewGUID()
dr("Name") = txtName.Text
dt.Rows.Add(dr)
DataGridView1.DataSource = dt
DataGridView1.DataBind()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接