簡體   English   中英

C# ASP.NET GridView UpdateRow

[英]C# ASP.NET GridView UpdateRow

我在 GridView Web 控件中編輯行時遇到問題。 我正在用 ASP.NET 編寫一個應用程序,並使用 NHibernate 從 MySQL 數據庫中獲取數據。 我有帶有 GridView 控件的 *.aspx 頁面。 商品.aspx代碼:

        <asp:GridView ID="tgv" runat="server" Width="915px" AutoGenerateColumns="False" 
            onrowcancelingedit="tgv_RowCancelingEdit" onrowediting="tgv_RowEditing" 
            onrowupdating="TaskGridView_RowUpdating">
            <RowStyle HorizontalAlign="Center" />
             <columns>
              <asp:boundfield datafield="Tovar_ID" headertext="ID" ReadOnly="True"/>

                    <asp:TemplateField HeaderText="Name">
                        <EditItemTemplate>
                            <asp:TextBox ID="editName" runat="server" Text='<%#Eval("Tovar_name") %>'></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server" Text='<%#Eval("Tovar_name") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>

              <asp:TemplateField HeaderText="Measure">
                        <EditItemTemplate>
                            <asp:TextBox ID="editMeasure" runat="server" Text='<%#Eval("Measure") %>'></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label2" runat="server" Text='<%#Eval("Measure") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
              <asp:TemplateField HeaderText="Buying price">
                        <EditItemTemplate>
                            <asp:TextBox ID="editBPrice" runat="server" Text='<%#Eval("Buying_Price") %>'></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label3" runat="server" Text='<%#Eval("Buying_Price") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
              <asp:TemplateField HeaderText="Selling price">
                        <EditItemTemplate>
                            <asp:TextBox ID="editSPrice" runat="server" Text='<%#Eval("Selling_Price") %>'></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label4" runat="server" Text='<%# Eval("Selling_Price") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                 <asp:CommandField ShowDeleteButton="True" />
                 <asp:CommandField ShowEditButton="True" />
            </columns>
        </asp:GridView>

我正在嘗試在下一個代碼中編輯數據:

 protected void tgv_RowEditing(object sender, GridViewEditEventArgs e)
        {
            //Set the edit index.
            tgv.EditIndex = e.NewEditIndex;
            //Bind data to the GridView control.
            tgv.DataBind();
        }

        protected void tgv_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            //Reset the edit index.
            tgv.EditIndex = -1;
            //Bind data to the GridView control.
            tgv.DataBind();
        }

        protected void tgv_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {

            GridViewRow row = tgv.Rows[e.RowIndex];
            ISession session = Transport.GetCurrentSession();
            ITransaction tx = session.BeginTransaction();
            Tovar t = session.Get<Tovar>(Convert.ToInt32(row.Cells[0].Text));
            string st = ((TextBox)tgv.Rows[e.RowIndex].FindControl("editName")).Text;
            t.tname = st;
            Response.Write(st);     
        session.Update(t);
        tx.Commit();
        session.Flush();
        Transport.CloseSession();
        tgv.EditIndex = -1;
        tgv.DataBind();

    }

當我單擊“保存”按鈕時,它會將文本框中的舊值保存到數據庫中。 我該如何解決這個問題? 我知道,有很多帖子都有這個問題。 我看了 5 個帖子,沒有找到解決方案。

頁面加載代碼:

    protected void Page_Load(object sender, EventArgs e)
    {
        ISession session = Transport.GetCurrentSession();
        ITransaction tx = session.BeginTransaction();

        DataTable dt = new DataTable();
        DataColumn dc = new DataColumn();
        dc.ColumnName = "Tovar_ID";
        dc.DataType = System.Type.GetType("System.Int32");
        dt.Columns.Add(dc);

        dc = new DataColumn();
        dc.ColumnName = "Tovar_name";
        dc.DataType = System.Type.GetType("System.String");
        dt.Columns.Add(dc);

        dc = new DataColumn();
        dc.ColumnName = "Measure";
        dc.DataType = System.Type.GetType("System.String");
        dt.Columns.Add(dc);

        dc = new DataColumn();
        dc.ColumnName = "Buying_Price";
        dc.DataType = System.Type.GetType("System.String");
        dt.Columns.Add(dc);

        dc = new DataColumn();
        dc.ColumnName = "Selling_Price";
        dc.DataType = System.Type.GetType("System.String");
        dt.Columns.Add(dc);


        IQuery goodsQuery = session.CreateQuery
          ("select a from Tovar as a order by a.tovarid");

        foreach (Tovar a in goodsQuery.Enumerable<Tovar>())
        {
            dt.Rows.Add(a.tovarid, a.tname, a.measure, a.bprice, a.sprice);
        }

        tgv.DataSource = dt;
        tgv.DataBind();
        tx.Commit();
        session.Flush(); 
        Transport.CloseSession();


    }

在調用 Databind 之前,您應該將 DataSource 分配給 Gridview 。 tg.DataSource=dt;
tgv.DataBind();

此外,在您的頁面加載中,僅第一次檢查和綁定 gridview

如果 (!Page.IsPostBack)
//綁定Gridview()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM