Удаление одной строки из gridview очищает все остальные строки Asp.Net C # - PullRequest
0 голосов
/ 03 октября 2018

У меня есть сетка для биллинга, в которой пользователь должен выбрать и добавить строки в сетку.Теперь проблема в том, что когда я пытаюсь удалить одну строку с помощью кнопки удаления, она очищает и все остальные строки.

gif, чтобы продемонстрировать это:

Screen1

моя разметка aspx:

<asp:GridView ID="Gridview1" runat="server" CssClass="table table-bordered table-hover table-responsive" ShowFooter="True" OnRowDeleting="Gridview1_RowDeleting" AutoGenerateColumns="False" OnRowDataBound="gvRowDataBound" OnRowCommand="Gridview1_RowCommand">
        <Columns>
            <asp:BoundField DataField="RowNumber" HeaderText="Sl. No." />
            <asp:TemplateField HeaderText="Item Name" ItemStyle-Wrap="false" HeaderStyle-Wrap="false">
                <ItemTemplate>
                    <asp:DropDownList ID="drpItemname" runat="server" Width="200px" CssClass="form-control select2" OnSelectedIndexChanged="GetItemDetails" AutoPostBack="true"></asp:DropDownList>
                </ItemTemplate>
                <HeaderStyle Wrap="False" />
                <ItemStyle Wrap="False" />
            </asp:TemplateField>
            <asp:TemplateField HeaderText="HSN Code" ItemStyle-Wrap="false" HeaderStyle-Wrap="false">
                <ItemTemplate>
                    <asp:TextBox ID="txthsn" runat="server" CssClass="form-control" Enabled="False"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Available Quantity" ItemStyle-Wrap="false" HeaderStyle-Wrap="false">
                <ItemTemplate>
                    <asp:TextBox ID="txtQttyAvailable" runat="server" CssClass="form-control" Enabled="False"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Quantity" ItemStyle-Wrap="false" HeaderStyle-Wrap="false">
                <ItemTemplate>
                    <asp:TextBox ID="txtQtty" runat="server" CssClass="form-control" OnTextChanged="CalculateTotal" AutoPostBack="true" Enabled="true"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Unit Price" ItemStyle-Wrap="false" HeaderStyle-Wrap="false">
                <ItemTemplate>
                    <asp:TextBox ID="txtUnitPrice" runat="server" CssClass="form-control" Enabled="False"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Discount" ItemStyle-Wrap="false" HeaderStyle-Wrap="false">
                <ItemTemplate>
                    <asp:TextBox ID="txtdisc" runat="server" CssClass="form-control" Enabled="False"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="S.GST" ItemStyle-Wrap="false" HeaderStyle-Wrap="false">
                <ItemTemplate>
                    <asp:TextBox ID="txtsgst" runat="server" CssClass="form-control" Enabled="False"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="C.GST" ItemStyle-Wrap="false" HeaderStyle-Wrap="false">
                <ItemTemplate>
                    <asp:TextBox ID="txtcgst" runat="server" CssClass="form-control" Enabled="False"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="I.GST" ItemStyle-Wrap="false" HeaderStyle-Wrap="false">
                <ItemTemplate>
                    <asp:TextBox ID="txtigst" runat="server" OnTextChanged="CalculateGST" AutoPostBack="true" CssClass="form-control" Enabled="False"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton runat="server" ID="linkDelete" CommandName="Delete" CommandArgument="<%# Container.DataItemIndex %>" CausesValidation="False" OnClick="linkDelete_Click">Remove</asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Total Price" ConvertEmptyStringToNull="False" ItemStyle-Wrap="false" HeaderStyle-Wrap="false">
                <ItemTemplate>
                    <asp:TextBox ID="txtTotalPrice" runat="server" CssClass="form-control" Enabled="False"></asp:TextBox>
                </ItemTemplate>
                <FooterStyle HorizontalAlign="Right" />
                <FooterTemplate>
                    <asp:Button ID="ButtonAdd" runat="server" CssClass="btn btn-primary" Text="Add Another Item" OnClick="AddItem" CausesValidation="False" />
                </FooterTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

вот мой код C #позади.Я разместил каждое событие и метод отдельно.

Чтобы установить начальную строку

private void SetInitialRow()
{
    DataTable dt = new DataTable();
    DataRow dr = null;
    dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
    dt.Columns.Add(new DataColumn("Column1", typeof(string)));
    dt.Columns.Add(new DataColumn("Column2", typeof(string)));
    dt.Columns.Add(new DataColumn("Column3", typeof(string)));
    dt.Columns.Add(new DataColumn("Column4", typeof(string)));
    dt.Columns.Add(new DataColumn("Column5", typeof(string)));
    dt.Columns.Add(new DataColumn("Column6", typeof(string)));
    dt.Columns.Add(new DataColumn("Column7", typeof(string)));
    dt.Columns.Add(new DataColumn("Column8", typeof(string)));
    dt.Columns.Add(new DataColumn("Column9", typeof(string)));
    dt.Columns.Add(new DataColumn("Column10", typeof(string)));
    dr = dt.NewRow();
    dr["RowNumber"] = 1;
    dr["Column1"] = string.Empty;
    dr["Column2"] = string.Empty;
    dr["Column3"] = string.Empty;
    dr["Column4"] = string.Empty;
    dr["Column5"] = string.Empty;
    dr["Column6"] = string.Empty;
    dr["Column7"] = string.Empty;
    dr["Column8"] = string.Empty;
    dr["Column9"] = string.Empty;
    dr["Column10"] = string.Empty;
    dt.Rows.Add(dr);
    //dr = dt.NewRow();
    //Store the DataTable in ViewState
    ViewState["CurrentTable"] = dt;
    Gridview1.DataSource = dt;
    Gridview1.DataBind();
}

Чтобы получить сведения об элементе

protected void GetItemDetails(object sender, EventArgs e)
{
    DropDownList ddl = sender as DropDownList;
    foreach (GridViewRow row in Gridview1.Rows)
    {
        Control ctrl = row.FindControl("drpItemName") as DropDownList;
        if (ctrl != null)
        {
            DropDownList ddl1 = (DropDownList)ctrl;
            if (ddl.ClientID == ddl1.ClientID)
            {
                TextBox QttyAvailable = row.FindControl("txtQttyAvailable") as TextBox;
                TextBox UnitPrice = row.FindControl("txtUnitPrice") as TextBox;
                TextBox HsnCode = row.FindControl("txthsn") as TextBox;
                TextBox Discount = row.FindControl("txtdisc") as TextBox;
                TextBox SGST = row.FindControl("txtsgst") as TextBox;
                TextBox CGST = row.FindControl("txtcgst") as TextBox;
                TextBox IGST = row.FindControl("txtigst") as TextBox;
                SqlConnection conn = new SqlConnection(constring);
                conn.Open();
                string str = "select * from Stock where itemname='" + ddl1.SelectedItem.ToString() + "'";
                SqlCommand com = new SqlCommand(str, conn);
                SqlDataReader reader = com.ExecuteReader();
                while (reader.Read())
                {
                    UnitPrice.Text = reader["unitprice"].ToString();
                    QttyAvailable.Text = reader["qtty"].ToString();
                    HsnCode.Text = reader["hsn"].ToString();
                    Discount.Text = reader["disc"].ToString();
                    SGST.Text = reader["sgst"].ToString();
                    CGST.Text = reader["cgst"].ToString();
                    IGST.Text = reader["igst"].ToString();
                }
                reader.Close();
                conn.Close();
            }
        }
    }
}

DropDownList SelectedIndex Запуск события из сетки с использованием привязки строк

protected void gvRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DropDownList drpItemName = (e.Row.FindControl("drpItemName") as DropDownList);
        foreach (GridViewRow row2 in Gridview1.Rows)
        {
            TextBox txt = row2.FindControl("txtTotalPrice") as TextBox;
            txt.Text = "0";
        }
        drpItemName.DataSource = GetData("SELECT DISTINCT itemname FROM Stock where rem != '1'");
        drpItemName.DataTextField = "itemname";
        drpItemName.DataValueField = "itemname";
        drpItemName.DataBind();
        //Add Default Item in the DropDownList.
        drpItemName.Items.Insert(0, new ListItem("Please select"));
        /*Select the Country of Customer in DropDownList.
        string country = (row.FindControl("lblCountry") as Label).Text;
        drpItemName.Items.FindByValue(country).Selected = true;*/

    }
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        string item = e.Row.Cells[0].Text;
        foreach (Button button in e.Row.Cells[2].Controls.OfType<Button>())
        {
            if (button.CommandName == "Delete")
            {
                button.Attributes["onclick"] = "if(!confirm('Do you want to delete " + item + "?')){ return false; };";
            }
        }
    }
}

Добавлениеновая строка и установка данных предварительного просмотра в виде сетки

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

                DropDownList box1 = (DropDownList)Gridview1.Rows[rowIndex].Cells[1].FindControl("drpItemName");
                TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("txthsn");
                TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("txtQttyAvailable");
                TextBox box4 = (TextBox)Gridview1.Rows[rowIndex].Cells[4].FindControl("txtQtty");
                TextBox box5 = (TextBox)Gridview1.Rows[rowIndex].Cells[5].FindControl("txtUnitPrice");
                TextBox box6 = (TextBox)Gridview1.Rows[rowIndex].Cells[6].FindControl("txtdisc");
                TextBox box7 = (TextBox)Gridview1.Rows[rowIndex].Cells[7].FindControl("txtsgst");
                TextBox box8 = (TextBox)Gridview1.Rows[rowIndex].Cells[8].FindControl("txtcgst");
                TextBox box9 = (TextBox)Gridview1.Rows[rowIndex].Cells[9].FindControl("txtigst");
                TextBox box10 = (TextBox)Gridview1.Rows[rowIndex].Cells[10].FindControl("txtTotalPrice");
                drCurrentRow = dtCurrentTable.NewRow();
                drCurrentRow["RowNumber"] = i + 1;
                dtCurrentTable.Rows[i - 1]["Column1"] = box1.Text;
                dtCurrentTable.Rows[i - 1]["Column2"] = box2.Text;
                dtCurrentTable.Rows[i - 1]["Column3"] = box3.Text;
                dtCurrentTable.Rows[i - 1]["Column4"] = box4.Text;
                dtCurrentTable.Rows[i - 1]["Column5"] = box5.Text;
                dtCurrentTable.Rows[i - 1]["Column6"] = box6.Text;
                dtCurrentTable.Rows[i - 1]["Column7"] = box7.Text;
                dtCurrentTable.Rows[i - 1]["Column8"] = box8.Text;
                dtCurrentTable.Rows[i - 1]["Column9"] = box9.Text;
                dtCurrentTable.Rows[i - 1]["Column10"] = box10.Text;
                rowIndex++;
            }
            dtCurrentTable.Rows.Add(drCurrentRow);
            ViewState["CurrentTable"] = dtCurrentTable;
            Gridview1.DataSource = dtCurrentTable;
            Gridview1.DataBind();
        }
    }
    else
    {
        Response.Write("ViewState is null");
    }
    //Set Previous Data on Postbacks
    SetPreviousData();
}
private void SetPreviousData()
{
    int rowIndex = 0;
    if (ViewState["CurrentTable"] != null)
    {
        DataTable dt = (DataTable)ViewState["CurrentTable"];
        if (dt.Rows.Count > 0)
        {
            for (int i = 0; i < dt.Rows.Count; i++)

            {
                DropDownList box1 = (DropDownList)Gridview1.Rows[rowIndex].Cells[1].FindControl("drpItemName");
                TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("txthsn");
                TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("txtQttyAvailable");
                TextBox box4 = (TextBox)Gridview1.Rows[rowIndex].Cells[4].FindControl("txtQtty");
                TextBox box5 = (TextBox)Gridview1.Rows[rowIndex].Cells[5].FindControl("txtUnitPrice");
                TextBox box6 = (TextBox)Gridview1.Rows[rowIndex].Cells[6].FindControl("txtdisc");
                TextBox box7 = (TextBox)Gridview1.Rows[rowIndex].Cells[7].FindControl("txtsgst");
                TextBox box8 = (TextBox)Gridview1.Rows[rowIndex].Cells[8].FindControl("txtcgst");
                TextBox box9 = (TextBox)Gridview1.Rows[rowIndex].Cells[9].FindControl("txtigst");
                TextBox box10 = (TextBox)Gridview1.Rows[rowIndex].Cells[10].FindControl("txtTotalPrice");
                box1.Text = dt.Rows[i]["Column1"].ToString();
                box2.Text = dt.Rows[i]["Column2"].ToString();
                box3.Text = dt.Rows[i]["Column3"].ToString();
                box4.Text = dt.Rows[i]["Column4"].ToString();
                box5.Text = dt.Rows[i]["Column5"].ToString();
                box6.Text = dt.Rows[i]["Column6"].ToString();
                box7.Text = dt.Rows[i]["Column7"].ToString();
                box8.Text = dt.Rows[i]["Column8"].ToString();
                box9.Text = dt.Rows[i]["Column9"].ToString();
                box10.Text = dt.Rows[i]["Column10"].ToString();
                rowIndex++;
                if (!string.IsNullOrEmpty(box10.Text) && !string.IsNullOrEmpty(box10.Text))
                {
                    box10.Text = dt.Rows[i]["Column10"].ToString();
                }
                else
                {
                    box10.Text = "0";
                }
            }
        }
    }
}

Удаление строки из вида сетки

protected void linkDelete_Click(object sender, EventArgs e)
{
    try
    {
        LinkButton lb = (LinkButton)sender;
        GridViewRow gvRow = (GridViewRow)lb.NamingContainer;
        int rowID = gvRow.RowIndex + 1;
        if (ViewState["CurrentTable"] != null)
        {
            DataTable dt = (DataTable)ViewState["CurrentTable"];
            if (dt.Rows.Count > 2)
            {
                if (gvRow.RowIndex < dt.Rows.Count - 1)
                {
                    //Remove the Selected Row data
                    dt.Rows.Remove(dt.Rows[rowID]);
                }
            }
            //Store the current data in ViewState for future reference
            ViewState["CurrentTable"] = dt;
            //Re bind the GridView for the updated data
            Gridview1.DataSource = dt;
            Gridview1.DataBind();
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
...