【问题标题】:Dynamically adding a row to a table in the User Interface在用户界面中向表中动态添加一行
【发布时间】:2013-03-26 13:26:00
【问题描述】:

我正在 ASP.NET 中开发一个应用程序,该应用程序需要一个表格,其中每个单元格都为 TextArea。问题是,该表中的行数应该是动态的,并且应该通过单击按钮(例如,“添加”按钮)添加一行

我对 ASP.NET 比较陌生,我从 GridView 开始,但无济于事。如果有人能告诉我从哪里开始进行这种动态添加行,那将对我有所帮助。

【问题讨论】:

  • 这个gridview是否绑定了某个数据源?
  • @jason 我没有在网格中显示来自数据源的任何数据。我只想动态放置文本区域,这将允许我将在文本区域中输入的那些数据添加到数据库中。网格的每一行(例如,3 个文本区域)都必须作为一行输入到数据库中。同样适用对于动态添加的行!

标签: asp.net gridview dynamic textarea


【解决方案1】:

你可以这样做

  1. 在您的页面上放置一个网格视图
  2. 制作您的数据输入表单并使用按钮单击事件向 gridview 动态添加一行
  3. 在表单保存时,使用 foreach loop 读取 gridview 的行并将它们保存到数据库中
  4. 使用ViewState 中的数据表存储临时行以保留回发值

我还添加了删除功能, ASPX

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="AddGridViewRows.aspx.cs" Inherits="AddGridViewRows" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <br />
        First Name :
        <asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>
        <br />
        Last Name:
        <asp:TextBox ID="txtLastName" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="btnAddRows" runat="server" onclick="btnAddRows_Click" 
            Text="Add Rows To Grid" />
        <br />
        <asp:GridView ID="GridView1" runat="server" AutoGenerateDeleteButton="True" 
            onrowdeleting="GridView1_RowDeleting">
        </asp:GridView>

    </div>
    </form>
</body>
</html>

代码隐藏

using System;
using System.Web.UI.WebControls;
using System.Data;

public partial class AddGridViewRows : System.Web.UI.Page
{

    DataTable dt = null;
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void btnAddRows_Click(object sender, EventArgs e)
    {
        if (ViewState["myData"] == null)
        {
            // Initialize data table if viewstate is null
            dt = new DataTable();
            dt.Columns.Add("SNo", typeof(int));
            dt.Columns.Add("FirstName", typeof(string));
            dt.Columns.Add("LastName", typeof(string));
            dt.Columns[0].AutoIncrement = true;    // Autogenerate serial key column for example
            dt.Columns[0].AutoIncrementSeed = 1;
        }
        else
            dt = ViewState["myData"] as DataTable;  // Grab datatable from viewstate if its not null

        // Add your data row
        DataRow dr = dt.NewRow();
        dr["FirstName"] = txtFirstName.Text;
        dr["LastName"] = txtLastName.Text;
        dt.Rows.Add(dr);
        // Bind your gridview
        GridView1.DataSource = dt;
        GridView1.DataBind();
        // Save datatable to ViewState
        ViewState["myData"] = dt;
    }

    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        if (ViewState["myData"] != null)
        {
            dt = ViewState["myData"] as DataTable;
            dt.Rows.RemoveAt(e.RowIndex);
            GridView1.DataSource = dt;
            GridView1.DataBind();
            ViewState["myData"] = dt;
        }
    }
}

【讨论】:

  • 我需要一些时间看看这是否有效。无论如何,感谢您的时间:) 我会看看结果如何,如有必要,我会回到这里。 :)
  • @thedarklord7 如果您觉得我的帖子有用,可以点赞,如果它解决了您的问题,您可以将其标记为答案。
  • 是的,我知道。但是你的回答会帮助我吗:我必须在TextAreas 中输入文本,这些文本放置在网格的每个单元格中,并且我希望将每一行作为表格中的一行添加到数据库中。它也适用于我使用按钮单击事件动态添加的那些行。你的答案能做到吗?
  • 只需在 gridview 模板字段中放置一个文本框并添加您的行,就像我现在正在做的那样。在表单保存时,使用 foreach 循环读取您的 gridview 行。你能告诉我你到目前为止都试过什么吗?
  • 我什么都没试过。我刚刚研究了 GridView 可以做什么。我有机会实施您在回答中提出的建议,发现这不是我想要的。但是你在评论中的建议给了我一点希望。动态添加的文本框将如何生成其 ID,这超出了我的理解范围?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
相关资源
最近更新 更多