向gridview添加新行删除其他行数据

时间:2013-12-30 06:47:28

标签: c# asp.net gridview

我有一个页面,当点击“添加项目”按钮时会添加一个新行。 这样做的代码是:

aspx页面:

<asp:GridView ID="Grid_ItemList" runat="server" AutoGenerateColumns="False" 
    CellPadding="4" ForeColor="#333333" OnRowDeleting="Grid_ItemList_RowDeleting" >


    <AlternatingRowStyle BackColor="White"  />
    <Columns>
        <asp:TemplateField HeaderText="Item Code">
            <ItemTemplate><asp:TextBox runat="server" ID="itemCode" OnTextChanged="setItemRate" AutoPostBack="true" ></asp:TextBox></ItemTemplate>              
        </asp:TemplateField>  

        <asp:TemplateField HeaderText="Qty">
            <ItemTemplate><asp:DropDownList ID="qtyList" runat="server">
                <asp:ListItem> 1</asp:ListItem>
                <asp:ListItem> 2</asp:ListItem>
                <asp:ListItem> 3</asp:ListItem>
                <asp:ListItem> 4</asp:ListItem>
                <asp:ListItem> 5</asp:ListItem>

            </asp:DropDownList></ItemTemplate>              
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Rate">
            <ItemTemplate><asp:TextBox runat="server" ID="rate" ReadOnly="true" ></asp:TextBox></ItemTemplate>              
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Prof Charge">
            <ItemTemplate><asp:TextBox runat="server" ID="profCharge" ReadOnly="true" ></asp:TextBox></ItemTemplate>              
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Discount">
            <ItemTemplate><asp:TextBox runat="server" ID="discount" ReadOnly="true" ></asp:TextBox></ItemTemplate>              
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Net Amount">
            <ItemTemplate><asp:TextBox runat="server" ID="net" ReadOnly="true" ></asp:TextBox></ItemTemplate>              
        </asp:TemplateField>


        <asp:CommandField ButtonType="Button" ShowDeleteButton="True" DeleteText="Remove" />


    </Columns>

    <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
    <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
    <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
    <SortedAscendingCellStyle BackColor="#FDF5AC" />
    <SortedAscendingHeaderStyle BackColor="#4D0000" />
    <SortedDescendingCellStyle BackColor="#FCF6C0" />
    <SortedDescendingHeaderStyle BackColor="#820000" />


</asp:GridView>

代码背后:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class ClerkRegistration_OP_Billing : System.Web.UI.Page
{
    DataTable dt = new DataTable();

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        SetInitialRow(); //display first empty row to enter item details
    }
}

//func to display first empty row in gridview 'Grid_ItemList'
private void SetInitialRow()
{
   // DataTable dt = new DataTable();
    DataRow dr = null;

    dr = dt.NewRow();
    dt.Rows.Add(dr);

    //Store the DataTable in ViewState
    ViewState["CurrentTable"] = dt;

    Grid_ItemList.DataSource = dt;
    Grid_ItemList.DataBind();
}


//function to add new row to gridview 'Grid_ItemList'
protected void addRow(object sender, EventArgs e)
{
    if (IsPostBack)
    if (ViewState["CurrentTable"] != null)
    {
        DataTable dt = (DataTable)ViewState["CurrentTable"];
        // DataRow drCurrentRow;
        DataRow dr = null;

        dr = dt.NewRow();
        dt.Rows.Add(dr);

        ViewState["CurrentTable"] = dt;

        Grid_ItemList.DataSource = dt;
        Grid_ItemList.DataBind();       

    }
}


protected void Grid_ItemList_RowDeleting(Object sender, GridViewDeleteEventArgs e)
{       

    if (ViewState["CurrentTable"] != null)
    {
        DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
        dtCurrentTable.Rows.RemoveAt(dtCurrentTable.Rows.Count - 1);
        ViewState["CurrentTable"] = dtCurrentTable;
        Grid_ItemList.DataSource = dtCurrentTable;
        Grid_ItemList.DataBind();
    }
}



protected void setItemRate(object sender, EventArgs e)
{
  //  GridViewRow row = Grid_ItemList.SelectedRow;
   // var itemcode = (sender as TextBox).Text;

    foreach (GridViewRow row in Grid_ItemList.Rows)
    {
        TextBox item = (TextBox)row.FindControl("itemCode");
        string itemcode= item.Text.ToUpper();

        TextBox itemRate = (TextBox)row.FindControl("rate");
        itemRate.Text = "100";
    }

}

}

* 这样可以正常工作,但问题是当我将一些数据写入第一行并单击“添加行”按钮时,会创建一个新行,但会删除输入第一行的数据。 找不到解决办法......请帮帮我。 *

1 个答案:

答案 0 :(得分:0)

请参阅此链接。这可能有所帮助 code project

refer

相关问题