将行添加到网格视图中 ASP.NET

本文关键字:ASP NET 视图 网格 添加 | 更新日期: 2023-09-27 18:36:44

我有以下GridView,它有几个DropDownList和TextBox。 如何在保留现有 GridView 的同时向其添加新行。我想使用链接按钮添加新行。我没有使用数据源控件,并且 GridView 当前通过数据表填充。 下面是网格视图:

<asp:LinkButton ID="btnAdd" runat="server" Text="Add Room" 
        onclick="btnAdd_Click"></asp:LinkButton>
    <asp:GridView ID="gvRP" runat="server" AutoGenerateColumns="false" 
        onrowdatabound="gvRP_RowDataBound" 
        onrowediting="gvRP_RowEditing">
    <Columns>
    <asp:TemplateField HeaderText="Room" ItemStyle-Width="100%">
    <ItemTemplate>
    <asp:Label runat="server" Text="Room"></asp:Label>
    <asp:DropDownList ID="ddlRoom" runat="server" AutoPostBack="True" DataTextField="Name"
        DataValueField="Id" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlRoom_SelectedIndexChanged">
        <asp:ListItem Value="-1">Select...</asp:ListItem>
    </asp:DropDownList>
    <asp:Label runat="server" AssociatedControlID="ddlRate" Text="Rate" ID="lblRate"></asp:Label><asp:DropDownList
        ID="ddlRate" runat="server" AppendDataBoundItems="true" DataTextField="Name"
        DataValueField="Id">
        <asp:ListItem Value="-1">Select...</asp:ListItem>
    </asp:DropDownList>
    <asp:Label  runat="server" Text="Adults"></asp:Label>
    <asp:TextBox ID="txtAdults" Text='<%#Bind("Adults") %>' runat="server" Width="25px"></asp:TextBox>
    <asp:Label  runat="server" Text="Children"></asp:Label>
    <asp:TextBox ID="txtChildren" Text='<%#Bind("Children") %>' runat="server"  Width="25px"></asp:TextBox>
    <asp:Label runat="server" Text="Check In"></asp:Label>
    <asp:TextBox ID="txtCheckIn" Text='<%#Bind("CheckIn") %>' runat="server" Width="75px"></asp:TextBox>
    <asp:Label  runat="server" Text="Check Out"></asp:Label>
    <asp:TextBox ID="txtCheckOut" Text='<%#Bind("CheckOut") %>' runat="server"  Width="75px"></asp:TextBox>
    <h3>Rates</h3>
    <asp:GridView ID="gvR" runat="server" AutoGenerateColumns="false">
    <Columns>
    <asp:BoundField DataField="Name" HeaderText="Rate" />
    <asp:BoundField DataField="Effective" HeaderText="Effective" />
    <asp:BoundField DataField="Expire" HeaderText="Expire" />
    <asp:BoundField DataField="Amount" HeaderText="Amount" />
    <asp:BoundField DataField="Code" HeaderText="Currency" />
    </Columns>
    </asp:GridView>
    </ItemTemplate>
    </asp:TemplateField>
    </Columns>
    </asp:GridView>

将行添加到网格视图中 ASP.NET

通常我会尝试做一个例子,但这个非常彻底,我不"认为"网址会去任何地方。有关全面示例,请参阅此链接。

这是重要的代码。

网 格

<FooterStyle HorizontalAlign="Right" />
<FooterTemplate>
    <asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" />
</FooterTemplate>

代码隐藏

protected void ButtonAdd_Click(object sender, EventArgs e)
{
      AddNewRowToGrid()
}
private void AddNewRowToGrid()
{
    int rowIndex = 0;
    if (ViewState["CurrentTable"] != null)
    {
        DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
        DataRow drCurrentRow = null;
        if (dtCurrentTable.Rows.Count > 0)
        {
            for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
            {
                //extract the TextBox values
            }
            dtCurrentTable.Rows.Add(drCurrentRow);
            ViewState["CurrentTable"] = dtCurrentTable;
            Gridview1.DataSource = dtCurrentTable;
            Gridview1.DataBind();
        }
    }
    else
    {
        Response.Write("ViewState is null");
    }
    //Set Previous Data on Postbacks
    SetPreviousData();
}

将标签控件或文本框放在 ItemTemplate 中,如果您最后将其放在最后,它将最终显示,例如

<ItemTemplate>
    ....
    <asp:Label Text="foo" runat="server" />
</ItemTemplate>

 <ItemTemplate>
    <asp:Label Text="foo" runat="server" />
     ....
 </ItemTemplate>

我决定采用这个解决方案:

DataTable dt = new DataTable();
DataColumn dcRoom = new DataColumn("Room", typeof(DropDownList));
DataColumn dcAdults = new DataColumn("Adults", typeof(string));
DataColumn dcChildren = new DataColumn("Children", typeof(string));
DataColumn dcCheckIn = new DataColumn("CheckIn", typeof(string));
DataColumn dcCheckOut = new DataColumn("CheckOut", typeof(string));
dt.Columns.AddRange(new DataColumn[] { dcRoom, dcAdults, dcChildren, dcCheckIn, dcCheckOut });
dt.Rows.Add(new object[] { new DropDownList(), "", "", "", "" });
gvRP.DataSource = dt;
gvRP.DataBind();

它怎么知道在下拉列表中放置什么(选择...),并且我没有指定两个下拉列表,但它仍然放置了第二个下拉列表。

namespace gridview_row_add
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            DataGridViewTextBoxColumn columntype = new DataGridViewTextBoxColumn();
            columntype.HeaderText = "Type";
            columntype.Width = 80;
            dataGridView1.Columns.Add(columntype);
            DataGridViewTextBoxColumn columnparameters = new DataGridViewTextBoxColumn();
            columnparameters.HeaderText = "Parameters";
            columnparameters.Width = 320;
            dataGridView1.Columns.Add(columnparameters);
            DataGridViewTextBoxColumn columndisplay = new DataGridViewTextBoxColumn();
            columndisplay.HeaderText = "Display";
            columndisplay.Width = 150;
            dataGridView1.Columns.Add(columndisplay);
            DataGridViewTextBoxColumn enumuration = new DataGridViewTextBoxColumn();
            enumuration.HeaderText = "Format";
            enumuration.Width = 90;
            dataGridView1.Columns.Add(enumuration);
            dataGridView1.AllowUserToAddRows = false;//please add this if u don't want to add exta rows or else make it true.          
        }
        private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.Rows.Add();//here on each click the new row will be added.
            int rowcount = dataGridView1.Rows.Count;
            dataGridView1.Rows[rowcount - 1].Cells[0].Value = "data" + rowcount.ToString();
            dataGridView1.Rows[rowcount-1].Cells[1].Value = "field";
            dataGridView1.Rows[rowcount-1].Cells[2].Value = "xyzzz";
            dataGridView1.Rows[rowcount-1].Cells[3].Value = "hts";
            rowcount++;                     
        }
    }
}

这段代码对我来说很好用。 在此代码中,我在 GirdView 中添加了四个标头,您可以根据需要更改它们。单击一个按钮将首先添加新行,然后将数据填充在该行中。希望这对你有用..