【问题标题】:Editable Grid view update is not working可编辑的网格视图更新不起作用
【发布时间】:2016-10-07 14:10:56
【问题描述】:

我正在尝试使用可编辑的 gridview 更新 gridview 数据,但我无法在后面的代码中获取编辑模板值。这是更新网格视图的代码

protected void mGrid_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        string name="";
        string email="";
        string password="";
        string phone="";
        string address="";
        string id="";
        try
        {
        password = ((TextBox)mGrid.Rows[e.RowIndex].FindControl("txtMPass")).Text;
        phone = ((TextBox)mGrid.Rows[e.RowIndex].FindControl("txtMphone")).Text;
        address = ((TextBox)mGrid.Rows[e.RowIndex].FindControl("txtMaddress")).Text;

        name = ((Label)mGrid.Rows[e.RowIndex].FindControl("lblMname")).Text;
        email = ((Label)mGrid.Rows[e.RowIndex].FindControl("lblMemail")).Text;

        id = getUID(email, name);

        com.CommandText = "UPDATE Users SET userPass=@pass,userPh=@ph,userAdd=@add WHERE userID=@id and userType='Manager'";
        com.Parameters.AddWithValue("@pass", password);
        com.Parameters.AddWithValue("@ph", phone);
        com.Parameters.AddWithValue("@add", address);
        com.Parameters.AddWithValue("@id",id );
        com.ExecuteNonQuery();
        }
        catch(Exception ex)
        {
            Response.Write(ex.ToString());
        }

        mGrid.EditIndex = -1;
        loadGrid();
        Response.Write(name + email + password + phone + address+"");
    }

private void loadGrid()
    {
        com.CommandText = "select * from Users where userType='Manager'";
        try
        {
            SqlDataReader r = com.ExecuteReader();
            mGrid.DataSource = r;
            mGrid.DataBind();
            r.Close();
        }
        catch (Exception exp)
        {
            Response.Write(exp.ToString());
        }
    }

在 Response.Write(---) 中,我得到的是旧值,而不是我在网格内更改的值

这是我的网格视图

<div class="col-md-9 table-responsive" style="margin-    top:10%;float:right;margin-right:6%;font-family:Calibri;font-size:13px;">
     <asp:GridView ID="mGrid" runat="server" AutoGenerateColumns="false" OnRowUpdating="mGrid_RowUpdating"
         CssClass="table  table-striped" onrowediting="EditCustomer" GridLines="None"
          OnRowCancelingEdit="CancelEdit" >
         <Columns>
             <asp:TemplateField>
                 <ItemTemplate >
                     <asp:Image ImageUrl="~/images/manager.png" Width="30" Height="30" runat="server" />
                 </ItemTemplate>
             </asp:TemplateField>
             <asp:TemplateField HeaderText="Name">
                 <ItemTemplate >
                     <asp:Label ID="lblMname" runat="server" Text='<%# Eval("userName")%>' ></asp:Label>
                 </ItemTemplate>
                 <EditItemTemplate>
                    <asp:Label ID="lblMname" runat="server" Text='<%# Eval("userName")%>' ></asp:Label>
                </EditItemTemplate>
             </asp:TemplateField>
             <asp:TemplateField HeaderText="Email">
                 <ItemTemplate>
                     <asp:Label ID="lblMemail" runat="server" Text='<%# Eval("userEmail")%>'></asp:Label>
                 </ItemTemplate>
                 <EditItemTemplate>
                    <asp:Label ID="lblMemail" runat="server" Text='<%# Eval("userEmail")%>'></asp:Label>
                </EditItemTemplate>
             </asp:TemplateField>
             <asp:TemplateField HeaderText="Password" >
                 <ItemTemplate>
                     <asp:Label ID="lblMPass" runat="server" Text='<%# Eval("userPass")%>'></asp:Label>
                 </ItemTemplate>
                 <EditItemTemplate>
                    <asp:TextBox ID="txtMPass" runat="server" Text='<%# Eval("userPass")%>' ></asp:TextBox>
                </EditItemTemplate>
             </asp:TemplateField>
             <asp:TemplateField HeaderText="Phone">
                 <ItemTemplate>
                     <asp:Label ID="lblMphone" runat="server" Text='<%# Eval("userPh")%>'></asp:Label>
                 </ItemTemplate>
                 <EditItemTemplate>
                    <asp:TextBox ID="txtMphone" runat="server" Text='<%# Eval("userPh")%>'></asp:TextBox>
                </EditItemTemplate>
             </asp:TemplateField>
             <asp:TemplateField HeaderText="Address">
                 <ItemTemplate>
                     <asp:Label ID="lblMaddress" runat="server" Text='<%# Eval("userAdd")%>'></asp:Label>
                 </ItemTemplate>
                 <EditItemTemplate>
                    <asp:TextBox ID="txtMaddress" runat="server" Text='<%# Eval("userAdd")%>' ></asp:TextBox>
                </EditItemTemplate>
             </asp:TemplateField>
             <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="lnkRemove" runat="server" CommandArgument = '<%# Eval("userID")%>' 
                        OnClientClick = "return confirm('Do you want to delete?')" 
                        Text = "Delete" OnClick="lnkRemove_Click"></asp:LinkButton>
                </ItemTemplate>
              </asp:TemplateField>
              <asp:CommandField  ShowEditButton="True" />
         </Columns>
     </asp:GridView>
 </div>

如果有人可以帮助我?

【问题讨论】:

    标签: sql asp.net gridview


    【解决方案1】:

    您必须将 GridView 值的初始加载放在 IsPostBack 检查中,否则将加载默认值并覆盖提交的值。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            loadGrid();
        }
    }
    

    【讨论】:

    • 我通过禁用网格视图的视图状态解决了这个错误,但我也会尝试这个:)谢谢:)
    猜你喜欢
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    相关资源
    最近更新 更多