Member 12324523 Ответов: 1

Gridview не хранит записи и не отображает последнюю введенную запись


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

Что я уже пробовал:

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        .Background
        {
            background-color: Black;
            filter: alpha(opacity=90);
            opacity: 0.8;
        }
        .Popup
        {
            background-color: #FFFFFF;
            border-width: 3px;
            border-style: solid;
            border-color: black;
            padding-top: 10px;
            padding-left: 10px;
            width: 400px;
            height: 350px;
        }
        .lbl
        {
            font-size:16px;
            font-style:italic;
            font-weight:bold;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:Button ID="Button1" runat="server" Text="Fill Form in Popup" />

            <div style="margin-left:10px;margin-top:10px">  
     <asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server" CellPadding="2"  

        ForeColor="#333333" GridLines="None">  
        <AlternatingRowStyle BackColor="White" />  
        <Columns>  
            <asp:BoundField HeaderStyle-Width="120px" HeaderText="FirstName" DataField="FirstName" />  
            <asp:BoundField HeaderStyle-Width="120px" HeaderText=" MiddleName" DataField="MiddleName" />  
            <asp:BoundField HeaderStyle-Width="120px" HeaderText=" LastName" DataField="LastName" />  
            <asp:BoundField HeaderStyle-Width="120px" HeaderText="Gender" DataField="Gender" />  
        </Columns>  
        <EditRowStyle BackColor="#2461BF" />  
        <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />  
        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />  
        <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />  
        <RowStyle BackColor="#EFF3FB" />  
        <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />  
        <SortedAscendingCellStyle BackColor="#F5F7FB" />  
        <SortedAscendingHeaderStyle BackColor="#6D95E1" />  
        <SortedDescendingCellStyle BackColor="#E9EBEF" />  
        <SortedDescendingHeaderStyle BackColor="#4870BE" />  
    </asp:GridView>  
    </div>  
<!-- ModalPopupExtender -->
<cc1:ModalPopupExtender ID="mp1" runat="server" PopupControlID="Panl1" TargetControlID="Button1"

    CancelControlID="Button2" BackgroundCssClass="Background">
</cc1:ModalPopupExtender>
<asp:Panel ID="Panl1" runat="server" CssClass="Popup" align="center" style = "display:none">
    <div id="irm1" style=" width: 300px; height: 250px;" runat="server" >
    <table>
    <tr>
    <td>
    <asp:Label ID="Label1" runat="server" CssClass="lbl" Text="First Name"></asp:Label>
    </td>
    <td>
    <asp:TextBox ID="TextBox1" runat="server" Font-Size="14px" ></asp:TextBox>
    </td>
    </tr>
    <tr>
    <td>
    <asp:Label ID="Label2" runat="server" CssClass="lbl" Text="Middle Name"></asp:Label>
    </td>
    <td>
    <asp:TextBox ID="TextBox2" runat="server" Font-Size="14px" ></asp:TextBox>
    </td>
    </tr>
    <tr>
    <td>
    <asp:Label ID="Label3" runat="server" CssClass="lbl" Text="Last Name"></asp:Label>
    </td>
    <td>
    <asp:TextBox ID="TextBox3" runat="server" Font-Size="14px" ></asp:TextBox>
    </td>
    </tr>
    <tr>
    <td>
    <asp:Label ID="Label4" runat="server" CssClass="lbl" Text="Gender"></asp:Label>
    </td>
    <td>
    <asp:TextBox ID="TextBox4" runat="server" Font-Size="14px" ></asp:TextBox>
    </td>
    <td>
    <asp:Button ID="Button3" runat="server" Text="Add" OnClick="Button3_Click" />
    </td>
        </tr>
    </table>
        </div>
    <br />
    <asp:Button ID="Button2" runat="server" Text="Close" />
</asp:Panel>
<!-- ModalPopupExtender -->
    </form>
</body>


В моем коде позади-

protected void Page_Load(object sender, EventArgs e)
       {
           dt = new DataTable();
           DataColumn dc1 = new DataColumn("FirstName");
           DataColumn dc2 = new DataColumn("MiddleName");
           DataColumn dc3 = new DataColumn("LastName");
           DataColumn dc4 = new DataColumn("Gender");
           dt.Columns.Add(dc1);
           dt.Columns.Add(dc2);
           dt.Columns.Add(dc3);
           dt.Columns.Add(dc4);
           DataRow dr1 = dt.NewRow();
           GridView1.DataSource = dt;
           GridView1.DataBind();
       }
       DataTable dt;

       protected void Button3_Click(object sender, EventArgs e)
       {
           DataRow dr1 = dt.NewRow();
           dr1[0] = TextBox1.Text;
           dr1[1] = TextBox2.Text;
           dr1[2] = TextBox3.Text;
           dr1[3] = TextBox4.Text;
           dt.Rows.Add(dr1);
           GridView1.DataSource = dt;
           GridView1.DataBind();
           ClearFields();

       }
       protected void ClearFields()
       {
           TextBox1.Text = "";
           TextBox2.Text = "";
           TextBox3.Text = "";
           TextBox4.Text = "";
       }

manishss

если вы хотите этого, вы можете сделать это другим способом

PIEBALDconsult

Я не вру, а вы пробовали ДТ.Метод acceptchanges() ?
https://msdn.microsoft.com/en-us/library/system.data.datatable.acceptchanges(v=против 110). aspx

Member 12324523

можете ли вы показать это в моем коде

1 Ответов

Рейтинг:
1

madhav_jain

Проблема в вашем коде при загрузке страницы вы повторно инициируете DataTable... Другое дело, что теперь вы поддерживаете datatable значения между постом назад. Используйте приведенный ниже код.

protected void Page_Load(object sender, EventArgs e)
       {
           if (ViewState["DT"] != null)
           {
               dt = (DataTable)ViewState["DT"];
           }
           else
           {
               dt = new DataTable();
               DataColumn dc1 = new DataColumn("FirstName");
               DataColumn dc2 = new DataColumn("MiddleName");
               DataColumn dc3 = new DataColumn("LastName");
               DataColumn dc4 = new DataColumn("Gender");
               dt.Columns.Add(dc1);
               dt.Columns.Add(dc2);
               dt.Columns.Add(dc3);
               dt.Columns.Add(dc4);
               ViewState["DT"] = dt;
           }

       }
protected void Button3_Click(object sender, EventArgs e)
       {

           DataRow Dr = dt.NewRow();
           Dr[0] = TextBox1.Text;
           Dr[1] = TextBox2.Text;
           Dr[2] = TextBox3.Text;
           Dr[3] = TextBox4.Text;
           dt.Rows.Add(Dr);
           dt.AcceptChanges();
           ViewState["DT"] = dt;
           GridView1.DataSource = dt;
           GridView1.DataBind();
           ClearFields();
       }